void AccountsListWidget::on_Add__released () { const auto& plugins = Manager_->GetPlugins (); AddAccountDialog dia (plugins, this); if (dia.exec () != QDialog::Accepted) return; auto plug = dia.GetStoragePlugin (); const QString& name = dia.GetAccountName (); if (!plug || name.isEmpty ()) return; plug->RegisterAccount (name); }
THMessagePtr zzz_RegisterAccountCommandHandler(THMessagePtr msg, MsgPrsPrivate& privData) { printf("Called!\n"); string& errMsg(privData.m_errMsg); do { DataBlobPtr blob; unsigned char* data = NULL; uint16 dataSize = 0; // Check if this message is valid. if (privData.m_account || // private data is not empty !(blob = msg->GetBodyBlob()) || // No blob !(data = (unsigned char*)(blob->GetData())) || // No Data !blob->GetDataSize() || // size of Blob is zero !(dataSize = *((uint16*)data))) // size of real data is zero { errMsg = "Data corrupt!"; break; } data += SIZEOFINT16; // Parse it into a Account class. Account* account = new Account; privData.m_account.reset(account); if (!account->ParseFromArray(data, dataSize)) { errMsg = "Failed to parse message."; break; } AM_Error err = RegisterAccount(account); if (err) { const char* msg = AM_ErrorStringify(err); if (msg) { errMsg = msg; } break; } // Update private data. privData.m_status = account->status(); privData.m_sessionId = "FAKE_SEESION_ID"; // XXX: // Reuse and update header. MessageHeaderPtr header = msg->GetMessageHeader(); header->set_cmd(RegisterUserRsp); header->set_length(0); header->set_session_id(privData.m_sessionId); // Generate a ServiceLists and set it as body of message. ServiceLists* body = NEW ServiceLists; if (!body) { errMsg = "No mem"; break; } // Add services provided to this account. body->add_types(VST_PhysicalInfo); body->set_tips("Welcome, you!"); msg->SetMessageBody(MessagePtr(body)); } while (0); if (!errMsg.empty()) { // XXX: Handle error here and generate reply. } return msg; }