TEST_F(ProxyTest, CanHandleRemoteAttributeFromParentInterface) { registerExtendedStub(); auto extendedProxy = runtime_->buildProxy<VERSION::commonapi::tests::ExtendedInterfaceProxy>(domain, commonApiAddressExtended); for (uint32_t i = 0; !extendedProxy->isAvailable() && i < 200; ++i) { usleep(20 * 1000); } ASSERT_TRUE(extendedProxy->isAvailable()); CommonAPI::CallStatus callStatus(CommonAPI::CallStatus::REMOTE_ERROR); uint32_t value; usleep(50000); auto& testAttribute = extendedProxy->getTestPredefinedTypeAttributeAttribute(); testAttribute.getValue(callStatus, value); EXPECT_EQ(callStatus, CommonAPI::CallStatus::SUCCESS); value = 7; uint32_t responseValue; testAttribute.setValue(value, callStatus, responseValue); EXPECT_EQ(callStatus, CommonAPI::CallStatus::SUCCESS); EXPECT_EQ(value, responseValue); usleep(50000); deregisterExtendedStub(); }
TEST_F(ProxyTest, CanHandleRemoteAttribute) { registerTestStub(); for (uint32_t i = 0; !proxy_->isAvailable() && i < 200; ++i) { usleep(20 * 1000); } ASSERT_TRUE(proxy_->isAvailable()); CommonAPI::CallStatus callStatus(CommonAPI::CallStatus::REMOTE_ERROR); uint32_t value; auto& testAttribute = proxy_->getTestPredefinedTypeAttributeAttribute(); testAttribute.getValue(callStatus, value); EXPECT_EQ(callStatus, CommonAPI::CallStatus::SUCCESS); value = 7; uint32_t responseValue; testAttribute.setValue(value, callStatus, responseValue); EXPECT_EQ(callStatus, CommonAPI::CallStatus::SUCCESS); EXPECT_EQ(value, responseValue); usleep(50000); deregisterTestStub(); }
void Skype::skypeMessage(const QString &message) { kdDebug(14311) << k_funcinfo << endl;//some debug info QString messageType = message.section(' ', 0, 0).stripWhiteSpace().upper();//get the first part of the message if (messageType == "CONNSTATUS") {//the connection status QString value = message.section(' ', 1, 1).stripWhiteSpace().upper();//get the second part of the message if (value == "OFFLINE") d->connStatus = csOffline; else if (value == "CONNECTING") d->connStatus = csConnecting; else if (value == "PAUSING") d->connStatus = csPausing; else if (value == "ONLINE") d->connStatus = csOnline; else if (value == "LOGGEDOUT") d->connStatus = csLoggedOut; resetStatus();//set new status } else if (messageType == "USERSTATUS") {//Status of this user QString value = message.section(' ', 1, 1).stripWhiteSpace().upper();//get the second part if (value == "UNKNOWN") d->onlineStatus = usUnknown; else if (value == "OFFLINE") d->onlineStatus = usOffline; else if (value == "ONLINE") d->onlineStatus = usOnline; else if (value == "SKYPEME") d->onlineStatus = usSkypeMe; else if (value == "AWAY") d->onlineStatus = usAway; else if (value == "NA") d->onlineStatus = usNA; else if (value == "DND") d->onlineStatus = usDND; else if (value == "INVISIBLE") d->onlineStatus = usInvisible; resetStatus(); } else if (messageType == "USERS") {//some user info QString theRest = message.section(' ', 1).stripWhiteSpace();//take the rest if (d->searchFor == "FRIENDS") {//it was initial search for al users QStringList names = QStringList::split(",", theRest);//divide it into names by comas kdDebug(14311) << "Names: " << names << endl;//write what you have done with that for (QStringList::iterator it = names.begin(); it != names.end(); ++it) {//run trough the names QString name = (*it).stripWhiteSpace();//get the name only if (name.isEmpty()) continue;//just skip the empty names emit newUser(name);//add the user to list } if (d->scanForUnread) search("MISSEDMESSAGES"); } } else if (messageType == "USER") {//This is for some contact const QString &contactId = message.section(' ', 1, 1);//take the second part, it is the user name const QString &type = message.section(' ', 2, 2).stripWhiteSpace().upper();//get what it is if ((type == "FULLNAME") || (type == "DISPLAYNAME") || (type == "SEX") || (type == "PHONE_HOME") || (type == "PHONE_OFFICE") || (type == "PHONE_MOBILE") || (type == "ONLINESTATUS") || (type == "BUDDYSTATUS") || (type == "HOMEPAGE")) { const QString &info = message.section(' ', 2);//and the rest is just the message for that contact emit contactInfo(contactId, info);//and let the contact know } else kdDebug(14311) << "Unknown message for contact, ignored" << endl; } else if (messageType == "CHATMESSAGE") {//something with message, maebe incoming/sent QString messageId = message.section(' ', 1, 1).stripWhiteSpace();//get the second part of message - it is the message ID QString type = message.section(' ', 2, 2).stripWhiteSpace().upper();//This part significates what about the message are we talking about (status, body, etc..) QString chatMessageType = (d->connection % QString("GET CHATMESSAGE %1 TYPE").arg(messageId)).section(' ', 3, 3).stripWhiteSpace().upper(); if (chatMessageType == "ADDEDMEMBERS") { QString status = message.section(' ', 3, 3).stripWhiteSpace().upper(); if (d->recvMessages.find(messageId) != d->recvMessages.end()) return; d->recvMessages << messageId; const QString &users = (d->connection % QString("GET CHATMESSAGE %1 USERS").arg(messageId)).section(' ', 3).stripWhiteSpace(); QStringList splitUsers = QStringList::split(' ', users); const QString &chatId = (d->connection % QString("GET CHATMESSAGE %1 CHATNAME").arg(messageId)).section(' ', 3, 3).stripWhiteSpace(); for (QStringList::iterator it = splitUsers.begin(); it != splitUsers.end(); ++it) { if ((*it).upper() == getMyself().upper()) continue; emit joinUser(chatId, *it); } return; } else if (chatMessageType == "LEFT") { QString status = message.section(' ', 3, 3).stripWhiteSpace().upper(); if (d->recvMessages.find(messageId) != d->recvMessages.end()) return; d->recvMessages << messageId; const QString &chatId = (d->connection % QString("GET CHATMESSAGE %1 CHATNAME").arg(messageId)).section(' ', 3, 3).stripWhiteSpace(); const QString &chatType = (d->connection % QString("GET CHAT %1 STATUS").arg(chatId)).section(' ', 3, 3).stripWhiteSpace().upper(); if ((chatType == "DIALOG") || (chatType == "LEGACY_DIALOG")) return; const QString &user = (d->connection % QString("GET CHATMESSAGE %1 FROM_HANDLE").arg(messageId)).section(' ', 3, 3).stripWhiteSpace(); const QString &reason = (d->connection % QString("GET CHATMESSAGE %1 LEAVEREASON").arg(messageId)).section(' ', 3, 3).stripWhiteSpace().upper(); QString showReason = i18n("Unknown"); if (reason == "USER_NOT_FOUND") { showReason = i18n("User not found"); } else if (reason == "USER_INCAPABLE") { showReason = i18n("Does not have multi-user chat capability"); } else if ((reason == "ADDER_MUST_BE_FRIEND") || ("ADDER_MUST_BE_AUTHORIZED")) { showReason = i18n("Chat denied"); } else if (reason == "UNSUBSCRIBE") { showReason = ""; } if (user.upper() == getMyself().upper()) return; emit leftUser(chatId, user, showReason); return; } if (type == "STATUS") {//OK, status of some message has changed, check what is it QString value = message.section(' ', 3, 3).stripWhiteSpace().upper();//get the last part, what status it is if (value == "RECEIVED") {//OK, received new message, possibly read it if (chatMessageType == "SAID") {//OK, it is some IM hitchHike(messageId);//receive the message } } else if (value == "SENDING") { if ((d->connection % QString("GET CHATMESSAGE %1 TYPE").arg(messageId)).section(' ', 3, 3).stripWhiteSpace().upper() == "SAID") { emit gotMessageId(messageId); } } else if (value == "SENT") {//Sendign out some message, that means it is a new one if ((d->connection % QString("GET CHATMESSAGE %1 TYPE").arg(messageId)).section(' ', 3, 3).stripWhiteSpace().upper() == "SAID")//it is some message I'm interested in emit gotMessageId(messageId);//Someone may be interested in its ID if (d->recvMessages.find(messageId) != d->recvMessages.end()) return;//we already got this one d->recvMessages << messageId; const QString &chat = (d->connection % QString("GET CHATMESSAGE %1 CHATNAME").arg(messageId)).section(' ', 3, 3).stripWhiteSpace(); const QString &body = (d->connection % QString("GET CHATMESSAGE %1 BODY").arg(messageId)).section(' ', 3); if (!body.isEmpty())//sometimes skype shows empty messages, just ignore them emit outgoingMessage(body, chat); } } } else if (messageType == "CHATMESSAGES") { if (d->searchFor == "MISSEDMESSAGES") {//Theese are messages we did not read yet QStringList messages = QStringList::split(' ', message.section(' ', 1));//get the meassage IDs for (QStringList::iterator it = messages.begin(); it != messages.end(); ++it) { QString Id = (*it).stripWhiteSpace(); if (Id.isEmpty()) continue; skypeMessage(QString("CHATMESSAGE %1 STATUS RECEIVED").arg(Id));//simulate incoming message notification } } } else if (messageType == "CALL") { const QString &callId = message.section(' ', 1, 1).stripWhiteSpace(); if (message.section(' ', 2, 2).stripWhiteSpace().upper() == "CONF_ID") { if (d->knownCalls.findIndex(callId) == -1) {//new call d->knownCalls << callId; const QString &userId = (d->connection % QString("GET CALL %1 PARTNER_HANDLE").arg(callId)).section(' ', 3, 3).stripWhiteSpace(); emit newCall(callId, userId); } const QString &confId = message.section(' ', 3, 3).stripWhiteSpace().upper(); if (confId != "0") {//It is an conference emit groupCall(callId, confId); } } if (message.section(' ', 2, 2).stripWhiteSpace().upper() == "STATUS") { if (d->knownCalls.findIndex(callId) == -1) {//new call d->knownCalls << callId; const QString &userId = (d->connection % QString("GET CALL %1 PARTNER_HANDLE").arg(callId)).section(' ', 3, 3).stripWhiteSpace(); emit newCall(callId, userId); } const QString &status = message.section(' ', 3, 3).stripWhiteSpace().upper(); if (status == "FAILED") { int reason = (d->connection % QString("GET CALL %1 FAILUREREASON").arg(callId)).section(' ', 3, 3).stripWhiteSpace().toInt(); QString errorText = i18n("Unknown error"); switch (reason) { case 1: errorText = i18n("Misc error"); break; case 2: errorText = i18n("User or phone number does not exist"); break; case 3: errorText = i18n("User is offline"); break; case 4: errorText = i18n("No proxy found"); break; case 5: errorText = i18n("Session terminated"); break; case 6: errorText = i18n("No common codec found"); break; case 7: errorText = i18n("Sound I/O error"); break; case 8: errorText = i18n("Problem with remote sound device"); break; case 9: errorText = i18n("Call blocked by recipient"); break; case 10: errorText = i18n("Recipient not a friend"); break; case 11: errorText = i18n("User not authorized by recipient"); break; case 12: errorText = i18n("Sound recording error"); break; } emit callError(callId, errorText); } emit callStatus(callId, status); } } else if (messageType == "CURRENTUSERHANDLE") { QString user = message.section(' ', 1, 1).stripWhiteSpace(); QString name = (d->connection % QString("GET USER %1 DISPLAYNAME").arg(user)).section(' ', 3).stripWhiteSpace(); if (name.isEmpty()) name = (d->connection % QString("GET USER %1 FULLNAME").arg(user)).section(' ', 3).stripWhiteSpace(); if (name.isEmpty()) name = user; emit setMyselfName(name); } }