15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/* 25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle 35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2006, Google Inc. 45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Redistribution and use in source and binary forms, with or without 65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * modification, are permitted provided that the following conditions are met: 75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer. 105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer in the documentation 125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * and/or other materials provided with the distribution. 135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 3. The name of the author may not be used to endorse or promote products 145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * derived from this software without specific prior written permission. 155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org */ 275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <iostream> 295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <string> 305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/thread.h" 325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/libjingle-plus/libjingleplus.h" 335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/libjingle-plus/testutil/libjingleplus_test_notifier.h" 345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#if defined(_MSC_VER) && (_MSC_VER < 1400) 365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid __cdecl std::_Throw(const std::exception &) {} 375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstd::_Prhand std::_Raise_handler =0; 385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#endif 395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid SetConsoleEcho(bool on) { 425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#ifdef WIN32 435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); 445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if ((hIn == INVALID_HANDLE_VALUE) || (hIn == NULL)) 455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return; 465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org DWORD mode; 485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!GetConsoleMode(hIn, &mode)) 495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return; 505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (on) { 525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org mode = mode | ENABLE_ECHO_INPUT; 535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } else { 545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org mode = mode & ~ENABLE_ECHO_INPUT; 555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SetConsoleMode(hIn, mode); 585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#else 595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (on) 605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org system("stty echo"); 615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org else 625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org system("stty -echo"); 635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#endif 645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgint main (int argc, char **argv) 675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org{ 685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string username; 695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string password; 705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool gaia = false; 725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (int i = 1; i < argc; i++) { 745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!strcmp(argv[i], "-gaia")) 755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org gaia = true; 765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::cout << "Username: "; 795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::cin >> username; 805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::cout << (gaia ? "Gaia cookie: " : "Password: "); 815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SetConsoleEcho(false); 825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::cin >> password; 835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SetConsoleEcho(true); 845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Create a LibjinglePlus object and give it the notifier interface 865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org LibjinglePlus ljp(new Notifier); 875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Login 895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ljp.Login(username, password, "talk.google.com", false, gaia); 905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::Status s; 925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org s.set_available(true); 935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org s.set_show(buzz::Status::SHOW_ONLINE); 945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org s.set_status("I'm online."); 955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::XmppMessage m; 975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org m.set_to(buzz::Jid(username + "@gmail.com")); 985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org m.set_body("What's up?"); 995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Typically, you would wait for WakeupMainThread to be called, and then call 1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // DoCallbacks. Because I have nothing else to do on the main thread, I'm just going 1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // to do a few things after 10 seconds and then poll every 2ms. 1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Sleep(10000); 1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // ljp.DoCallbacks(); 1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ljp.SendPresence(s); 1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ljp.SendXmppMessage(m); 1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#ifdef WIN32 1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org MSG msg; 1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org while (GetMessage(&msg, NULL, 0, 0)) { 1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org DispatchMessage(&msg); 1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#else 1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (;;) { 1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ljp.DoCallbacks(); 1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Sleep(2); 1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#endif 1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 120