FACT++  1.0
void SkypeClient::HandleDBusMessage ( DBusMessage *  dbus_msg)
inlineprivate

Definition at line 349 of file skypeclient.cc.

References Error(), id, Tools::Split(), and Tools::Trim().

350  {
352  return;
353 
354  // CALL target1, target2, target3
355  // SET CALL <id> STATUS FINISHED
356 
357  // Stores the argument passed to the Notify method
358  // into notify_argument.
359 
360  char *notify_argument=0;
361  dbus_message_get_args(dbus_msg, 0,
362  DBUS_TYPE_STRING, &notify_argument,
363  DBUS_TYPE_INVALID);
364 
365  Info("Notify: "+string(notify_argument));
366 
367  const vector<string> vec = Split(notify_argument);
368 
369  if (vec[0]=="CURRENTUSERHANDLE")
370  {
371  if (vec[1]!=fUser)
372  {
373  Error("Wrong user '"+vec[1]+"' logged in, '"+fUser+"' expected!");
375  return;
376  }
377  }
378 
379  if (vec[0]=="CONNSTATUS")
380  {
381  // OFFLINE / CONNECTING / PAUSING / ONLINE
382  if (vec[1]!="ONLINE")
383  {
384  Error("Connection status '"+vec[1]+"'");
386  return;
387  }
388  }
389 
390  if (vec[0]=="USERSTATUS")
391  {
392  if (vec[1]!="ONLINE")
393  {
394  Info("Skype user not visible... setting online.");
395  SendDBusMessageNB("SET USERSTATUS ONLINE");
396  }
397  }
398 
399  // USER rtlprmft RECEIVEDAUTHREQUEST Please allow me to see when you are online
400 
401  if (vec[0]=="USER")
402  {
403  if (vec[2]=="ONLINESTATUS")
404  {
405  if (vec[3]=="OFFLINE")
406  {
407  }
408  Info("User '"+vec[1]+"' changed status to '"+vec[3]+"'");
409  }
410 
411  // Answer authorization requests
412  if (vec[2]=="RECEIVEDAUTHREQUEST")
413  SendDBusMessageNB("SET USER "+vec[1]+" BUDDYSTATUS 2 "+fAuthorizationMsg);
414 
415  //if (vec[2]=="NROF_AUTHED_BUDDIES")
416  // cout << vec[1] << " --> " << vec[3];
417  }
418 
419  if (vec[0]=="GROUP")
420  {
421  // 1: gorup id
422  // 2: NROFUSERS
423  // 3: n
424  }
425 
426  if (vec[0]=="CHATMESSAGE")
427  {
428  if (vec[2]=="STATUS" && (vec[3]=="RECEIVED"|| vec[3]=="READ"))
429  {
430  const uint64_t last = stoll(vec[1]);
431 
432  // Check if message has already been processed: Sometimes
433  // some messages are received twice as READ/READ
434  if (last<=fLastReadMessage)
435  return;
436  fLastReadMessage = last;
437 
438  string rc;
439 
440  rc=SendDBusMessage("GET CHATMESSAGE "+vec[1]+" CHATNAME");
441 
442  const string id = Split(rc)[3];
443 
444  rc=SendDBusMessage("GET CHATMESSAGE "+vec[1]+" BODY");
445 
446  const size_t p = rc.find(" BODY ");
447  if (p==string::npos)
448  {
449  cout<< "BODY TAG NOT FOUND|" << rc << "|" << endl;
450  return;
451  }
452 
453  rc = Tools::Trim(rc.substr(rc.find(" BODY ")+6));
454 
455  if (rc=="start")
456  {
457  auto it = find(fContacts.begin(), fContacts.end(), id);
458  if (it==fContacts.end())
459  {
460  SendSkypeMessage(id, "Successfully subscribed.");
461  fContacts.push_back(id);
462  }
463  else
464  SendSkypeMessage(id, "You are already subscribed.");
465 
466  return;
467  }
468  if (rc=="stop")
469  {
470  auto it = find(fContacts.begin(), fContacts.end(), id);
471  if (it!=fContacts.end())
472  {
473  SendSkypeMessage(id, "Successfully un-subscribed.");
474  fContacts.erase(it);
475  }
476  else
477  SendSkypeMessage(id, "You were not subscribed.");
478 
479  return;
480  }
481 
482  if (rc=="status")
483  {
484  for (auto it=fContacts.begin(); it!=fContacts.end(); it++)
485  {
486  if (*it==vec[1])
487  {
488  SendSkypeMessage(id, "You are subscribed.");
489  return;
490  }
491  }
492  SendSkypeMessage(id, "You are not subscribed.");
493  return;
494  }
495 
496  SendSkypeMessage(id, "SYNTAX ERROR\n\nAvailable commands:\nPlease use either 'start', 'stop' or 'status'");
497 
498  }
499  }
500 
501  if (vec[0]=="CHAT")
502  {
503  const string id = vec[1];
504  if (vec[2]=="ACTIVITY_TIMESTAMP")
505  {
506  //SendDBusMessage("CHAT CREATE "+Contact(vec[1]));
507  //Info(vec[2]);
508  // ALTER CHAT DISBAND
509  }
510  if (vec[2]=="MYROLE")
511  {
512  }
513  if (vec[2]=="MEMBERS")
514  {
515  }
516  if (vec[2]=="ACTIVEMEMBERS")
517  {
518  }
519  if (vec[2]=="STATUS")
520  {
521  // vec[3]=="DIALOG")
522  }
523  if (vec[2]=="TIMESTAMP")
524  {
525  }
526  if (vec[2]=="DIALOG_PARTNER")
527  {
528  }
529  if (vec[2]=="FRIENDLYNAME")
530  {
531  // Notify: CHAT #maggiyy/$rtlprmft;da26ea52b3e70e65 FRIENDLYNAME Lamouette | noch ne message
532  }
533  }
534 
535  if (vec[0]=="CALL")
536  {
537  if (vec[2]=="STATUS" && vec[2]=="INPROGRESS")
538  SendDBusMessageNB("SET CALL "+vec[1]+ "STATUS FINISHED");
539 
540  // CALL 1501 STATUS UNPLACED
541  // CALL 1501 STATUS ROUTING
542  // CALL 1501 STATUS RINGING
543  }
544 
545  }
int GetCurrentState() const
return the current state of the machine
string SendDBusMessage(const string &cmd, bool display=true)
Definition: skypeclient.cc:197
char id[4]
Definition: FITS.h:71
uint64_t fLastReadMessage
Definition: skypeclient.cc:35
vector< string > Split(const string &msg)
Definition: skypeclient.cc:335
int Error(const std::string &str)
Definition: MessageImp.h:49
static const string fAuthorizationMsg
Definition: skypeclient.cc:17
string fUser
Definition: skypeclient.cc:31
bool SendDBusMessageNB(const string &cmd)
Definition: skypeclient.cc:298
int Info(const std::string &str)
Definition: MessageImp.h:47
std::string Trim(const std::string &str)
Definition: tools.cc:68
bool SendSkypeMessage(const string &chat, const string &msg)
Definition: skypeclient.cc:315
vector< string > fContacts
Definition: skypeclient.cc:29

+ Here is the call graph for this function: