void CSametimeProto::UserListCreate() { debugLog(_T("CSametimeProto::UserListCreate() start")); mwServiceAware_unsetAttribute(service_aware, mwAttribute_SPEAKERS); mwServiceAware_unsetAttribute(service_aware, mwAttribute_MICROPHONE); mwServiceAware_unsetAttribute(service_aware, mwAttribute_VIDEO_CAMERA); mwServiceAware_setAttributeBoolean(service_aware, mwAttribute_AV_PREFS_SET, TRUE); mwServiceAware_setAttributeBoolean(service_aware, mwAttribute_FILE_TRANSFER, TRUE); aware_list = mwAwareList_new(service_aware, &mwAwareList_handler); // add all contacts DBVARIANT dbv; mwAwareIdBlock id_block; GList *gl = 0; for (MCONTACT hContact = db_find_first(m_szModuleName); hContact; hContact = db_find_next(hContact, m_szModuleName)) { if (db_get_b(hContact, m_szModuleName, "ChatRoom", 0) == 0 /*&& proto && !mir_strcmp( PROTO, proto)*/) { if (!db_get_utf(hContact, m_szModuleName, "stid", &dbv)) { if (dbv.pszVal) { if (GetAwareIdFromContact(hContact, &id_block)) { // add user to aware list gl = g_list_prepend(0, &id_block); mwAwareList_addAware(aware_list, gl); free(id_block.user); g_list_free(gl); } } db_free(&dbv); } } } // add self - might be necessary for some servers if (!db_get_utf(0, m_szModuleName, "stid", &dbv)) { id_block.type = mwAware_USER; id_block.user = dbv.pszVal; id_block.community = 0; gl = g_list_prepend(0, &id_block); mwAwareList_addAware(aware_list, gl); g_list_free(gl); db_free(&dbv); } }
MeanwhileSession::MeanwhileSession(MeanwhileAccount *acc) : session(0), state(mwSession_STOPPED), account(acc), socket(0) { HERE; /* set up main session hander */ memset(&sessionHandler, 0, sizeof(sessionHandler)); set_session_handler(io_write, IOWrite); set_session_handler(io_close, IOClose); set_session_handler(on_stateChange, StateChange); set_session_handler(on_setPrivacyInfo, SetPrivacyInfo); set_session_handler(on_setUserStatus, SetUserStatus); set_session_handler(on_admin, Admin); set_session_handler(on_announce, Announce); set_session_handler(clear, Clear); session = mwSession_new(&sessionHandler); mwSession_setClientData(session, this, 0L); /* set up the aware service */ memset(&awareHandler, 0, sizeof(awareHandler)); set_aware_handler(on_attrib, Attrib); awareService = mwServiceAware_new(session, &awareHandler); mwSession_addService(session, (struct mwService *)awareService); /* create an aware list */ memset(&awareListHandler, 0, sizeof(awareListHandler)); set_aware_list_handler(on_aware, Aware); set_aware_list_handler(on_attrib, Attrib); awareList = mwAwareList_new(awareService, &awareListHandler); mwAwareList_setClientData(awareList, this, 0L); /* set up an im service */ memset(&imHandler, 0, sizeof(imHandler)); set_im_handler(conversation_opened, ConvOpened); set_im_handler(conversation_closed, ConvClosed); set_im_handler(conversation_recv, ConvReceived); imHandler.place_invite = 0L; imHandler.clear = 0L; imService = mwServiceIm_new(session, &imHandler); mwService_setClientData((struct mwService *)imService, this, 0L); mwSession_addService(session, (struct mwService *) imService); /* add resolve service */ resolveService = mwServiceResolve_new(session); mwService_setClientData((struct mwService *)resolveService, this, 0L); mwSession_addService(session, (struct mwService *) resolveService); /* storage service */ storageService = mwServiceStorage_new(session); mwService_setClientData((struct mwService *)storageService, this, 0L); mwSession_addService(session, (struct mwService *) storageService); #if 0 /* conference service setup - just declines invites for now. */ memset(&conf_handler, 0, sizeof(conf_handler)); conf_handler.on_invited = _conference_invite; srvc_conf = mwServiceConference_new(session, &conf_handler); mwService_setClientData((struct mwService *)srvc_conf, this, 0L); mwSession_addService(session, (struct mwService *) srvc_conf); #endif /* add a necessary cipher */ mwSession_addCipher(session, mwCipher_new_RC2_40(session)); mwSession_addCipher(session, mwCipher_new_RC2_128(session)); }