void mwSession_start(struct mwSession *s) { struct mwMsgHandshake *msg; int ret; g_return_if_fail(s != NULL); g_return_if_fail(mwSession_isStopped(s)); if(mwSession_isStarted(s) || mwSession_isStarting(s)) { g_debug("attempted to start session that is already started/starting"); return; } state(s, mwSession_STARTING, 0); msg = (struct mwMsgHandshake *) mwMessage_new(mwMessage_HANDSHAKE); msg->major = GUINT(property_get(s, mwSession_CLIENT_VER_MAJOR)); msg->minor = GUINT(property_get(s, mwSession_CLIENT_VER_MINOR)); msg->login_type = GUINT(property_get(s, mwSession_CLIENT_TYPE_ID)); msg->loclcalc_addr = GUINT(property_get(s, mwSession_CLIENT_IP)); if(msg->major >= 0x001e && msg->minor >= 0x001d) { msg->unknown_a = 0x0100; msg->local_host = property_get(s, mwSession_CLIENT_HOST); } ret = mwSession_send(s, MW_MESSAGE(msg)); mwMessage_free(MW_MESSAGE(msg)); if(ret) { mwSession_stop(s, CONNECTION_BROKEN); } else { state(s, mwSession_HANDSHAKE, 0); } }
bool MeanwhileSession::isConnecting() { return mwSession_isStarting(session); }