Exemple #1
0
void MinecraftDynmapProto::SignOffWorker(void*)
{
	ScopedLock s(signon_lock_);

	SetEvent(events_loop_event_);

	m_cookie.clear();
	m_title.clear();
	m_server.clear();
	m_timestamp.clear();

	int old_status = m_iStatus;
	m_iStatus = ID_STATUS_OFFLINE;

	Netlib_Shutdown(hEventsConnection);

	OnLeaveChat(NULL, NULL);

	delSetting("LogonTS");

	ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, m_iStatus);

	//SetAllContactStatuses(ID_STATUS_OFFLINE);
	//ToggleStatusMenuItems(false);

	if (hConnection)
		Netlib_CloseHandle(hConnection);
	hConnection = NULL;

	if (hEventsConnection)
		Netlib_CloseHandle(hEventsConnection);
	hEventsConnection = NULL;
}
Exemple #2
0
void avatars_server_connection::shutdownConnection()
{
	stopThread = TRUE;

	mir_cslock l(localSeqMutex);
	if (hConnection)
		Netlib_Shutdown(hConnection);
}
Exemple #3
0
void CAimProto::shutdown_file_transfers(void)
{
	for (int i = 0; i < m_ft_list.getCount(); ++i) {
		file_transfer& ft = m_ft_list[i];
		if (ft.hConn)
			Netlib_Shutdown(ft.hConn);
	}
}
Exemple #4
0
void CAimProto::shutdown_chat_conn(void)
{
	for(int i=0; i<chat_rooms.getCount(); ++i)
	{
		chat_list_item& item = chat_rooms[i];
		if (item.hconn)
		{
			aim_sendflap(item.hconn,0x04,0,NULL,item.seqno);
			Netlib_Shutdown(item.hconn);
		}
	}
}
Exemple #5
0
void __cdecl CMsnProto::msn_keepAliveThread(void*)
{
	bool keepFlag = true;

	hKeepAliveThreadEvt = CreateEvent(NULL, FALSE, FALSE, NULL);

	msnPingTimeout = 45;

	while (keepFlag) {
		switch (WaitForSingleObject(hKeepAliveThreadEvt, msnPingTimeout * 1000)) {
		case WAIT_TIMEOUT:
			keepFlag = msnNsThread != NULL;
			if (usingGateway)
				msnPingTimeout = 45;
			else {
				msnPingTimeout = 20;
				keepFlag = keepFlag && (lastMsgId?msnNsThread->sendPacketPayload("PNG", "CON", "\bLast-Msg-Id: %I64u\r\n\r\n", lastMsgId):
					(msnRegistration?msnNsThread->sendPacketPayload("PNG", "CON", "\b\r\n"):
					msnNsThread->sendPacket("PNG", "CON 0")));
			}
#ifdef OBSOLETE
			p2p_clearDormantSessions();
#endif
			if (hHttpsConnection && (clock() - mHttpsTS) > 60 * CLOCKS_PER_SEC) {
				HANDLE hConn = hHttpsConnection;
				hHttpsConnection = NULL;
				Netlib_Shutdown(hConn);
			}
			if (mStatusMsgTS && (clock() - mStatusMsgTS) > 60 * CLOCKS_PER_SEC) {
				mStatusMsgTS = 0;
				ForkThread(&CMsnProto::msn_storeProfileThread, NULL);
			}
			if (MyOptions.netId!=NETID_SKYPE && MSN_RefreshOAuthTokens(true)) 
				ForkThread(&CMsnProto::msn_refreshOAuthThread, msnNsThread);
			break;

		case WAIT_OBJECT_0:
			keepFlag = msnPingTimeout > 0;
			break;

		default:
			keepFlag = false;
			break;
		}
	}

	CloseHandle(hKeepAliveThreadEvt); hKeepAliveThreadEvt = NULL;
	debugLogA("Closing keep-alive thread");
}
Exemple #6
0
void CIcqProto::icq_serverDisconnect(BOOL bBlock)
{
	if (hServerConn)
	{
		NetLog_Server("Server shutdown requested");
		Netlib_Shutdown(hServerConn);

		if (serverThreadHandle)
		{
			// Not called from network thread?
			if (bBlock && GetCurrentThreadId() != serverThreadId)
				while (ICQWaitForSingleObject(serverThreadHandle, INFINITE) != WAIT_OBJECT_0);

			CloseHandle(serverThreadHandle);
			serverThreadHandle = NULL;
		}
	}
}
Exemple #7
0
int __cdecl CAimProto::FileCancel(MCONTACT hContact, HANDLE hTransfer)
{
	file_transfer *ft = (file_transfer*)hTransfer;
	if (!ft_list.find_by_ft(ft)) return 0;

	debugLogA("We are cancelling a file transfer.");

	aim_chat_deny(hServerConn, seqno, ft->sn, ft->icbm_cookie);

	if (ft->hConn)
	{
		Netlib_Shutdown(ft->hConn);
		SetEvent(ft->hResumeEvent);
	}
	else
		ft_list.remove_by_ft(ft);

	return 0;
}
Exemple #8
0
void OmegleProto::SignOff(void*)
{
	ScopedLock s(signon_lock_);

	int old_status = m_iStatus;
	m_iStatus = ID_STATUS_OFFLINE;

	Netlib_Shutdown(facy.hEventsConnection);

	OnLeaveChat(NULL, NULL);

	delSetting("LogonTS");

	ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, m_iStatus);

	//SetAllContactStatuses( ID_STATUS_OFFLINE );
	//ToggleStatusMenuItems(false);

	if (facy.hEventsConnection)
		Netlib_CloseHandle(facy.hEventsConnection);
	facy.hEventsConnection = NULL;
}
Exemple #9
0
int CAimProto::OnGCEvent(WPARAM wParam,LPARAM lParam) 
{
	GCHOOK *gch = (GCHOOK*) lParam;
	if (!gch) return 1;

	if (strcmp(gch->pDest->pszModule, m_szModuleName)) return 0;

	char* id = mir_t2a(gch->pDest->ptszID);
	chat_list_item* item = find_chat_by_id(id);

	if (item == NULL) return 0;

	switch (gch->pDest->iType) 
	{
		case GC_SESSION_TERMINATE: 
			aim_sendflap(item->hconn,0x04,0,NULL,item->seqno);
			Netlib_Shutdown(item->hconn);
			break;

		case GC_USER_MESSAGE:
			if (gch->ptszText && _tcslen(gch->ptszText)) 
			{
				char* msg = mir_utf8encodeT(gch->ptszText);
				aim_chat_send_message(item->hconn, item->seqno, msg);
				mir_free(msg);
			}
			break;
		case GC_USER_CHANMGR: 
			DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_CHATROOM_INVITE), NULL, invite_to_chat_dialog, 
				LPARAM(new invite_chat_param(item->id, this)));
			break;

		case GC_USER_PRIVMESS:
			{
				char* sn = mir_t2a(gch->ptszUID);
				HANDLE hContact = contact_from_sn(sn);
				mir_free(sn);
				CallService(MS_MSG_SENDMESSAGE, (WPARAM)hContact, 0);
			}
			break;

		case GC_USER_LOGMENU:
			switch(gch->dwData) 
			{
			case 10:
				DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_CHATROOM_INVITE), NULL, invite_to_chat_dialog, 
					LPARAM(new invite_chat_param(item->id, this)));
				break;

			case 20:
				chat_leave(id);
				break;
			}
			break;
		
		case GC_USER_NICKLISTMENU: 
			{
				char *sn = mir_t2a(gch->ptszUID);
				HANDLE hContact = contact_from_sn(sn);
				mir_free(sn);

				switch (gch->dwData) 
				{
				case 10:
					CallService(MS_USERINFO_SHOWDIALOG, (WPARAM)hContact, 0);
					break;

				case 20:
					CallService(MS_HISTORY_SHOWCONTACTHISTORY, (WPARAM)hContact, 0);
					break;

				case 110:
					chat_leave(id);
					break;
				}
			}
			break;

		case GC_USER_TYPNOTIFY: 
			break;
	}
	mir_free(id);

	return 0;
}
Exemple #10
0
void CSkypeProto::ShutdownConnections()
{
	Netlib_Shutdown(m_pollingConnection);
	Netlib_Shutdown(m_TrouterConnection);
	//Netlib_Shutdown(m_hNetlibUser);
}
Exemple #11
0
void FacebookProto::ChangeStatus(void*)
{
	ScopedLock s(signon_lock_);
	ScopedLock b(facy.buddies_lock_);

	int new_status = m_iDesiredStatus;
	int old_status = m_iStatus;

	if (new_status == ID_STATUS_OFFLINE)
	{ // Logout	
		debugLogA("### Beginning SignOff process");
		m_signingOut = true;

		SetEvent(update_loop_lock_);

		// Shutdown and close channel handle
		Netlib_Shutdown(facy.hMsgCon);
		if (facy.hMsgCon)
			Netlib_CloseHandle(facy.hMsgCon);
		facy.hMsgCon = NULL;

		// Turn off chat on Facebook
		if (getByte(FACEBOOK_KEY_DISCONNECT_CHAT, DEFAULT_DISCONNECT_CHAT))
			facy.chat_state(false);

		facy.logout();

		OnLeaveChat(NULL, NULL);
		SetAllContactStatuses(ID_STATUS_OFFLINE);
		ToggleStatusMenuItems(false);
		delSetting(FACEBOOK_KEY_LOGON_TS);

		facy.chat_traceid_.clear();
		facy.chat_sticky_num_.clear();
		facy.chat_sticky_pool_.clear();
		facy.chat_msgs_recv_ = 0;
		facy.chat_req_ = 0;

		facy.clear_cookies();
		facy.clear_notifications();
		facy.clear_chatrooms();
		facy.clear_readers();
		facy.buddies.clear();
		facy.messages_ignore.clear();
		facy.messages_timestamp.clear();
		facy.pages.clear();
		facy.typers.clear();

		// Clear thread/user id caches?
		/* Right now it's commented out because it's not really needed to erase - maybe only when user changes login/pass in same account, but even then it shouldn't cause problems
		facy.thread_id_to_user_id.clear();
		facy.chat_id_to_hcontact.clear();
		facy.user_id_to_hcontact.clear();
		*/

		// Close connection handle
		if (facy.hFcbCon)
			Netlib_CloseHandle(facy.hFcbCon);
		facy.hFcbCon = NULL;

		m_iStatus = facy.self_.status_id = ID_STATUS_OFFLINE;
		ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, m_iStatus);

		m_signingOut = false;
		debugLogA("### SignOff complete");

		return;
	}
	else if (old_status == ID_STATUS_OFFLINE)
	{ // Login
		SYSTEMTIME t;
		GetLocalTime(&t);
		debugLogA("[%d.%d.%d] Using Facebook Protocol RM %s", t.wDay, t.wMonth, t.wYear, __VERSION_STRING_DOTS);

		debugLogA("*** Beginning SignOn process");

		m_enableChat = getBool(FACEBOOK_KEY_ENABLE_CHATS, DEFAULT_ENABLE_CHATS);

		m_iStatus = facy.self_.status_id = ID_STATUS_CONNECTING;
		ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, m_iStatus);

		ResetEvent(update_loop_lock_);

		// Workaround for not working "mbasic." for some users - reset this flag at every login
		facy.mbasicWorks = true;

		if (NegotiateConnection() && facy.home() && facy.reconnect())
		{
			// Load all friends
			ProcessFriendList(NULL);

			// Process friendship requests
			ForkThread(&FacebookProto::ProcessFriendRequests, NULL);

			// Sync threads, get messages - or get unread messages
			if (getBool(FACEBOOK_KEY_LOGIN_SYNC, DEFAULT_LOGIN_SYNC))
				ForkThread(&FacebookProto::SyncThreads, NULL);
			else
				ForkThread(&FacebookProto::ProcessUnreadMessages, NULL);

			// Get notifications
			ForkThread(&FacebookProto::ProcessNotifications, NULL);

			// Load pages for post status dialog
			ForkThread(&FacebookProto::ProcessPages, NULL);

			// Load on this day posts
			if (getByte(FACEBOOK_KEY_EVENT_ON_THIS_DAY_ENABLE, DEFAULT_EVENT_ON_THIS_DAY_ENABLE))
				ForkThread(&FacebookProto::ProcessOnThisDay, NULL);

			setDword(FACEBOOK_KEY_LOGON_TS, (DWORD)time(NULL));
			ForkThread(&FacebookProto::UpdateLoop, NULL);
			ForkThread(&FacebookProto::MessageLoop, NULL);

			if (getByte(FACEBOOK_KEY_SET_MIRANDA_STATUS, DEFAULT_SET_MIRANDA_STATUS))
				ForkThread(&FacebookProto::SetAwayMsgWorker, NULL);
		}
		else {
			ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_FAILED, (HANDLE)old_status, m_iStatus);

			if (facy.hFcbCon)
				Netlib_CloseHandle(facy.hFcbCon);
			facy.hFcbCon = NULL;

			facy.clear_cookies();

			// Set to offline
			m_iStatus = m_iDesiredStatus = facy.self_.status_id = ID_STATUS_OFFLINE;
			ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, m_iStatus);

			debugLogA("*** SignOn failed");

			return;
		}

		ToggleStatusMenuItems(true);
		debugLogA("*** SignOn complete");
	}

	m_invisible = (new_status == ID_STATUS_INVISIBLE);

	// Remember time of switching to away (and if we are idle already, use the idle time)
	m_awayTS = (new_status == ID_STATUS_AWAY ? (m_idleTS > 0 ? m_idleTS : ::time(NULL)) : 0);

	facy.chat_state(!m_invisible);

	ForkThread(&FacebookProto::ProcessBuddyList, NULL);

	m_iStatus = facy.self_.status_id = new_status;
	ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, m_iStatus);

	debugLogA("*** ChangeStatus complete");
}
void WASocketConnection::forceShutdown() {
	Netlib_Shutdown(this->hConn);
}
Exemple #13
0
int ServicesPreShutdown(WPARAM wParam, LPARAM lParam) {
	Netlib_Shutdown(hNetlibHttp);
	return 0;
}
Exemple #14
0
int CSteamProto::OnPreShutdown(WPARAM, LPARAM)
{
	Netlib_Shutdown(this->m_hNetlibUser);
	this->m_hNetlibUser = NULL;
	return 0;
}
Exemple #15
0
int TwitterProto::OnPreShutdown(WPARAM, LPARAM)
{
	Netlib_Shutdown(m_hNetlibUser);
	Netlib_Shutdown(hAvatarNetlib_);
	return 0;
}