diff options
author | dequis <dx@dxzone.com.ar> | 2018-03-11 16:33:55 -0300 |
---|---|---|
committer | dequis <dx@dxzone.com.ar> | 2018-03-11 16:33:55 -0300 |
commit | a949b43ed657154d4ff8492bbdb16202a1a9f22d (patch) | |
tree | da8fcbf57e0abb4af60ceccf15b1b2358c9cdd74 /protocols | |
parent | 8167346dd5d87b0bc53c7e396577e19e586954fe (diff) |
Remove old skype plugin. Use the skypeweb purple plugin instead.
RIP
This plugin relied on the skype linux client, which doesn't work
anymore. During login it just does exit(0) for mysterious reasons.
I guess that's the server trying to say that it's not supported.
This is officially dead now after a few years of kinda-almost-working.
Diffstat (limited to 'protocols')
56 files changed, 0 insertions, 4344 deletions
diff --git a/protocols/skype/.bzrignore b/protocols/skype/.bzrignore deleted file mode 100644 index e90a033b..00000000 --- a/protocols/skype/.bzrignore +++ /dev/null @@ -1,19 +0,0 @@ -Changelog -HEADER.html -*.gz -*.asc -.htaccess -shot -*.swp -aclocal.m4 -autom4te.cache -config.log -config.mak -config.status -configure -etc -install-sh -skype.so -skyped.conf -skyped.conf.dist -skype.dylib* diff --git a/protocols/skype/HACKING b/protocols/skype/HACKING deleted file mode 100644 index 935856a7..00000000 --- a/protocols/skype/HACKING +++ /dev/null @@ -1,80 +0,0 @@ -== Tabs - -I use the following tabs during the development: - -1) bitlbee-skype: - -vim, make, etc. - -2) bitlbee: - -gdb --args ./bitlbee -v -n -D -run - -3) skyped: - -python skyped.py -n -d - -4) irssi - - -== Tests - -The plugin is tested with a mocked IRC client and a mocked skyped. - -=== Requirements - -Python pexpect module is required to run the tests. - -To run tests with bitlbee built in a development tree and not (the one) -installed in the system (e.g. /usr), make sure to specify --plugindir= option to -./configure script during the build process: - -bitlbee% ./configure --skype=1 --plugindir="$(realpath .)" - -Otherwise bitlbee will try to load skype.so (among other things) from /usr/lib, -which is probably not what you want to test, or produce "Unknown protocol" -error. - -=== Running - -Tests can be run by running test.py script in this ("protocols/skype") -directory. - -For more control over how/which tests are being run from there, use "python -m -unittest" command: - -bitlbee/protocols/skype% python -m unittest test -bitlbee/protocols/skype% python -m unittest -f test -bitlbee/protocols/skype% python -m unittest test.Test.testMsg - -If bitlbee crashes during tests with SIGSEGV (segmentation fault), it's likely -that there is some problem with skype.c plugin. -To get a backtrace of such crash, use: - -bitlbee/protocols/skype% ATTACH_GDB=true python -m unittest test.Test.testMsg - -Example shows running "testMsg" test with gdb attached to bitlbee, which will -produce full backtrace in "t/gdb-<pid>.log" files (see pid in pexpect error -output of the test). - -=== Adding new tests - -To add a new test, the following steps are necessary: - -1) Add a new -skyped.mock file: just do the test manually, copy&paste the -skyped output and clean it up, so Alice talks to Bob. You can test the created -mock file by starting skyped with the -m option, and testing it from an IRC -client manually. - -2) Add a new -bitlbee.mock file: do the test manually from irssi, and use: - -/connect -rawlog rawlog localhost - -Then clean up the rawlog: the input lines are parsed as matching patterns, so -boring prefix/suffix text can be left out, non-interesting lines can be -deleted. The output lines still have to be strict IRC commands, as usual. - -3) Add the new test to test.py and run it! - -// vim: ft=asciidoc diff --git a/protocols/skype/Makefile b/protocols/skype/Makefile deleted file mode 100644 index 95a134c6..00000000 --- a/protocols/skype/Makefile +++ /dev/null @@ -1,27 +0,0 @@ --include ../../Makefile.settings -ifdef _SRCDIR_ -_SRCDIR_ := $(_SRCDIR_)protocols/skype/ -endif - -DATE := $(shell date +%Y-%m-%d) -INSTALL = install - -all: -clean: - -# take this from the kernel -check: - perl checkpatch.pl --show-types --ignore LONG_LINE,CAMELCASE --no-tree --file skype.c - -test: all - ./test.py - -install-doc: - $(INSTALL) -d $(DESTDIR)$(MANDIR)/man1 - $(INSTALL) -m644 $(_SRCDIR_)skyped.1 $(DESTDIR)$(MANDIR)/man1 - -uninstall-doc: - rm -f $(DESTDIR)$(MANDIR)/man1/skyped.1* - -%.1: $(_SRCDIR_)%.txt $(_SRCDIR_)asciidoc.conf - a2x --asciidoc-opts="-f $(_SRCDIR_)asciidoc.conf" -a bee_date=$(DATE) -f manpage $< diff --git a/protocols/skype/NEWS b/protocols/skype/NEWS deleted file mode 100644 index b55b34c6..00000000 --- a/protocols/skype/NEWS +++ /dev/null @@ -1,131 +0,0 @@ -VERSION DESCRIPTION ------------------------------------------------------------------------------ -0.9.0 - merge support for building the plugin on OpenBSD - - merge support for running skyped without gobject and - pygnutls/pyopenssl - as a side effect this adds Windows support - - add /ctcp call|hangup support (you need BitlBee from bzr to use - this) - - add group support (see http://wiki.bitlbee.org/UiFix) -0.8.4 - now using python2.7 directly in case python would point to python3k - - merge patch to avoid a crash when failing to connect to skyped - - merge support for building the plugin on NetBSD - - merge Debian patches -0.8.3 - support for BitlBee 1.3dev - - fixed --debug switch (-d was fine) - - documentation fixes -0.8.2 - building documentation is now optional - - new settings: test_join and show_moods - - '~' in skyped.conf is now expanded to the user's home directory - - groupchat channel names are now persistent (requires - BitlBee-1.2.6) -0.8.1 - support for BitlBee 1.2.5 - - support for Skype 2.1.0.81 and Skype4Py 1.0.32.0 - - the plugin part now supports FreeBSD - - fix for edited messages, the prefix can now be configured -0.8.0 - fix build on x86_64 (-fPIC usage) - - debug messages now have a timestamp - - more work on having the default config under ~/.skyped - - added a manual page for skyped -0.7.2 - add --log option to skyped to allow logging while it the - daemon is in the background. - - prefer config files from ~/.skyped over /etc/skyped - - handle the case when LANG and LC_ALL env vars are empty -0.7.1 - mostly internal changes, the monster read callback is - now replaced by tiny parser functions -0.7.0 - made 'make config' more portable - - add 'skypeconsole' buddy for debugging purposes - - support autojoin for bookmarked groupchats - - skyped: make hardwired '/dev/null' portable and fix - Python-2.6 warnings -0.6.3 - various osx-specific improvements (see the new screenshot!) - - added python-gnutls install instructions - - bitlbee.pc is now searched under - /usr/local/lib/pkgconfig by default to help LFS monkeys ;) -0.6.2 - bugfix: make install required the plugin even in case - its build was disabled -0.6.1 - added keepalive traffic to avoid disconnects in bitlbee - when there is no traffic for a long time - - now the plugin or skyped is automatically disabled if - the dependencies are not available; useful in case the - plugin is to be installed on a public server, or the - skyped is to be used with a public server only -0.6.0 - works with BitlBee 1.2.1 -0.5.1 - configure now automatically detects the right prefix to - match witl BitlBee's one - - minor documentation improvements (public chats, bug - reporting address) -0.5.0 - skyped now uses gnutls if possible, which seem to be - more stable, compared to openssl. - - skyped now tries to handle all read/write errors from/to - clients, and always just warn about failures, never exit. - - installation for Debian users should be more simple - - improved documentation - - this .0 release should be quite stable, only about 100 - lines of new code -0.4.2 - skyped should be now more responsive - - new skypeout_offline setting for hiding/showing SkypeOut - contacts - - support for SkypeOut calls - - support for querying the balance from Skype - - all setting should be documented now -0.4.1 - support for building the plugin on Mac OSX - - tested with BitlBee 1.2 and Skype 2.0.0.63 - - avoid ${prefix} (by autoconf) in the config file as we - don't handle such a variable - - now you can call echo123 (patch by Riskó Gergely) -0.4.0 - support for starting, accepting and rejecting calls - - also updated documentation (the key is the account set - skype/call command) - - as usual with the .0 releases, be careful, ~200 lines of - new code -0.3.2 - support for Skype 2.0.0.43 - - skyped now automatically starts/shuts down skype - - improved 'make prepare' to handle more automake versions - - documentation improvements -0.3.1 - beautify output when skyped is interrupted using ^C - - 'nick skype foo' now really sets display name, not the mood - text - - documentation fixups - - this version should be again as stable as 0.2.6 was -0.3.0 - authentication support in skyped via ssl - - ~200 lines of new code, so be careful :) - - upgraders: please read the documentation about how to set up - your config the ssl certificate, this was no necessary till now -0.2.6 - the server setting has a default value, 'localhost' so in most - cases you no longer have to set it explicitly - - support for receiving emoted messages, ie. when the user types - '/me foo' - - support for setting the display name (nick 0 "foo bar") - it - sets the mood text -0.2.5 - now bitlbee's info command is supported (it displays full name, - birthday, homepage, age, etc.) -0.2.4 - improve documentation based on feedback from people on #bitlbee - - fixed for Skype4Py >= 0.9.28.4 - - tested with latest Skype beta, too (the one which supports - video) -0.2.3 - fixed that annoying "creating groupchat failed" warning -0.2.2 - don't change the topic if skype does not report a successful - topic change - - fixed for the recent bitlbee API changes -0.2.1 - topic support in group chats - - bugfixes for multiline messages - - this version should be again as stable as 0.1.4 was -0.2.0 - group chat support - - ~300 lines of new code, so be careful :) - - the version number mentions that this is not a minor change -0.1.4 - documentation: mention the version of all deps (requirements - section) - - fix sending / sending accents - - don't use internal functions of skype4py - - skyped no longer dies when skype is killed -0.1.3 - support for edited messages - - ignore empty messages (skype does the same) - - support for multiline messages - - switch to the x11 api instead of dbus (it's much more stable) -0.1.2 - notification when a new call arrives in - - more documentation (vnc) - - first release which works with unpatched bitlbee -0.1.1 - skyped now runs as daemon in the background by default - - skyped now automatically reconnects on Skype restarts -0.1.0 - initial release - - see README for major features diff --git a/protocols/skype/README b/protocols/skype/README deleted file mode 100644 index 021f6d20..00000000 --- a/protocols/skype/README +++ /dev/null @@ -1,359 +0,0 @@ -= Skype plugin for BitlBee -Miklos Vajna <vmiklos-at-vmiklos-dot-hu> - -== Status - -[quote, Wilmer van der Gaast (author of BitlBee)] -____ -Okay, this exists now, with lots of thanks to vmiklos for his *excellent* -work!! - -It's not in the main BitlBee and it'll never be for various reasons, but -because it's a plugin that shouldn't be a problem. -____ - -One day I browsed the BitlBee bugtracker and found -http://bugs.bitlbee.org/bitlbee/ticket/82[this] ticket. Then after a while I -returned and saw that it was still open. So I wrote it. - -It's pretty stable (one day I wanted to restart it because of an upgrade -and just noticed it was running for 2+ months without crashing), I use -it for my daily work. Being a plug-in, no patching is required, you can -just install it after installing BitlBee itself. - -NOTE: You will see that this implementation of the Skype plug-in still requires -a Skype instance to be running. This is because I'm not motivated to reverse -engineer Skype's -http://en.wikipedia.org/wiki/Skype_Protocol#Obfuscation_Layer[obfuscation -layer]. (Not mentioning that you should ask your lawyer about if it is legal or -not..) - -== Requirements - -* Skype >= 1.4.0.99. The latest version I've tested is 4.1.0.20. -* BitlBee >= 3.0. The latest version I've tested is @BITLBEE_VERSION@. Use - old versions (see the NEWS file about which one) if you have older BitlBee - installed. -* Skype4Py >= 0.9.28.7. Previous versions won't work due to API changes. - The latest version I've tested is 1.0.32.0. - -* Python >= 2.5. Skype4Py does not work with 2.4. - -* OS: `bitlbee-skype` has been tested under Linux and Mac OS X. The plugin part - has been tested under Free/Open/NetBSD as well. The daemon part has been - tested on Windows, too. - -== How to set it up - -Before you start. The setup is the following: BitlBee can't connect directly to -Skype servers (the company's ones). It needs a running Skype client to do so. -In fact BitlBee will connect to `skyped` (a tcp server, provided in this -package) and `skyped` will connect to to your Skype client. - -The benefit of this architecture is that you can run Skype and `skyped` -on a machine different to the one where you run BitlBee (it can be even -a public server) and/or your IRC client. - -NOTE: The order is important. First `skyped` starts Skype. Then `skyped` -connects to Skype, finally BitlBee can connect to `skyped`. - -=== Installing - -Either use your package manager to install the Skype plugin, using something -like: - ----- -# apt-get install skyped bitlbee-plugin-skype ----- - -Or install http://sourceforge.net/projects/skype4py/[Skype4Py], and build -BitlBee with `--skype=1`. - -=== Configuring - -See the manpage of `skyped`. - -== Setting up Skype in a VNC server (optional) - -Optionally, if you want to run Skype on a server, you might want to setup up -a `VNC` server as well. I used `tightvnc` but probably other `VNC` servers will -work, too. - -First run - ----- -$ vncpasswd ~/.vnc/passwd ----- - -and create a password. You will need it at least once. - -Now create `~/.vnc/xstartup` with the following contents: - ----- -#!/bin/sh - -blackbox ----- - -Adjust the permissions: - ----- -$ chmod +x ~/.vnc/xstartup ----- - -Then start the server: - ----- -$ vncserver ----- - -Then connect to it, start an `xterm`, set up Skype (username, password, -enable X11 API and allow the `Skype4Py` client), quit from Skype, and -start `skyped`. If you want to watch its traffic, enable debug messages -and foreground mode: - ----- -$ skyped -n -d ----- - -== Features - -- Download nicks and away statuses from Skype - -- Noticing joins / parts while we're connected - -- Sending messages - -- Receiving messages - -- Receiving away status changes - -- `skyped` (the tcp daemon that is a gateway between Skype and tcp) - -- Error handling when `skyped` is not running and when it exits - -- Marking received messages as seen so that Skype won't say there are unread messages - -- Adding / removing contacts - -- Set away state when you do a `/away`. - -- When you `account off`, Skype will set status to `Offline` - -- When you `account on`, Skype will set status to `Online` - -- Detect when somebody wants to add you and ask for confirmation - -- Detect when somebody wants to transfer a file - -- Group chat support: - - * Detect if we're invited - - * Send / receive group chat messages - - * Invite others (using `/invite <nick>`) - - * Part from group chats - - * Starting a group chat (using `/j #nick`) - -- Topic changes in group chats: - - * Show the current topic (if any) on join - - * Notice when someone changes the topic - - * Support changing the topic using `/topic` - -- Viewing the profile using the `info` command. - -- Handling skype actions (when the `CHATMESSAGE` has `EMOTED` type) - -- Setting your display name using the `nick` command. - -- Running Skype on a machine different to BitlBee is possible, the - communication is encrypted. - -- Managing outgoing calls (with call duration at the end): - - * `/ctcp nick call` - * `/ctcp nick hangup` - -- Managing outgoing SkypeOut or conference calls: - - * `account skype set call +18005551234` - * `account skype set call nick1 nick2` - * `account skype set -del call` - -- Managing incoming calls via questions, just like when you add / remove - contacts. - -- Querying the current SkypeOut balance: - - * `account skype set balance query` - -- For debug purposes, it's possible to send any command to `skyped`. To - achieve this, you need to: - - * `account skype set skypeconsole true` - - * then writing `skypeconsole: <command>` will work in the control - channel. - - * `account skype set skypeconsole_receive true` will make the - `skypeconsole` account dump all the received raw traffic for you - -- If you want to automatically join bookmarked groupchats right after - you logged in, do: - - * `account skype set auto_join true` - -- Edited messages are shown with the `EDIT:` prefix. If you don't like - this, you can set your own prefix using: - - * `account skype set edit_prefix "updated message:"` - -- The `echo123` test account is hidden by default. If you want to see it: - - * `account skype set test_join true` - -- Mood texts are not shown by default. - - * If you want to see them: `account skype set show_moods true` - * If you want to change your mood text: `account skype set mood_text 'foo bar'` - -- Group support: - - * To enable: `account skype set read_groups true` - * Skype groups are told to BitlBee - * The usual `/invite` in a group channel adds the buddy to the group in skype - as well (and if necessary, it creates a new group in Skype) - -== What needs to be done (aka. TODO) - -- Notice if foo invites bar. Currently you can see only that bar joined. - -- Public chats. See - link:https://developer.skype.com/jira/browse/SCL-381[this feature - request], this is because it is still not possible (under Linux) to - `join_chat` to a public chat.. - -- Add yasrd (Yet Another Skype-Related Daemon) to allow using a public - server for users who are behind NAT. - -== I would like to have support for ... - -If something does not work and it's not in the TODO section, then please -contact me! Please also try the bzr version before reporting a bug, your -problem may be already fixed there. - -In fact, of course, I wrote this documentation after figured out how to do this -setup, so maybe I left out some steps. If you needed 'any' additional tricks, -then it would be nice to include them here. - -== Known bugs - -- File transfers are view-only from BitlBee. Quoting the - https://developer.skype.com/Docs/ApiDoc/FILETRANSFER_object[relevant - documentation]: 'File transfers cannot be initiated nor accepted via - API commands.' So it's not something I can add support for, sadly. - -== Screenshots - -You can reach some screenshots link:shot[here]. - -== Additional resources - -The Skype API documentation is -http://developer.skype.com/resources/public_api_ref.zip[here] if you're -interested. - -== Testimonials - ----- -00:56 < scathe> I like your skype plugin :) ----- - ----- -It's really working great so far. - -Good Job and thank you! -Sebastian ----- - ----- -Big respect for your work, i really appreciate it. - -Martin ----- - ----- -Thanks for bitlbee-skype. As a blind Linux user, I cannot use the -skype GUI client because qt apps ar not accessible yet with the -available screen readers. bitlbee-skype allows me to make use of skype -without having to interact much with the GUI client, which helps me a -lot. - -Lukas ----- - ----- -02:12 < newton> i must say, i love this little bee ;) -02:15 < newton> tried it out today with the skype plugin, good work! ----- - ----- -18:10 < miCSu> it works fine ----- - ----- -13:56 < seo> i just want to thank you :) -13:56 < seo> for bitlbee-skype -13:57 < seo> it's working very well, so, again, thank you for your work, and for sharing it ----- - ----- -22:16 < ecraven> vmiklos: thanks a lot for the skype plugin for bitlbee! ----- - ----- -I'm blind and so I have to use a screen reader, in my case Gnome-Orca. -But since Skype is written in QT, while Orca uses gtk+, I have no direct -access to the Skype interface. That's why I desided to use Skyped and -Erc. -The text console is fully accessible. -Thank you very much. - -Hermann ----- - ----- -i love that bitlbeeplugin. big thx for that. - -michael ----- - ----- -23:47 < krisfremen> thanks for creating this fabulous piece of software vmiklos :) ----- - -== Thanks - -to the following people: - -* people in link:AUTHORS[AUTHORS] for their contributions - -* Arkadiusz Wahlig, author of skype4py, for making suggestions to skyped - -* Gabor Adam Toth (tg), for noticing extra code is needed to handle multiline - messages - -* Cristobal Palmer (tarheelcoxn), for helping to testing the plugin in a - timezone different to mine - -* people on `#bitlbee` for feedback - -Back to my link:/projects[projects page]. - -// vim: ft=asciidoc diff --git a/protocols/skype/asciidoc.conf b/protocols/skype/asciidoc.conf deleted file mode 100644 index f52b3ad6..00000000 --- a/protocols/skype/asciidoc.conf +++ /dev/null @@ -1,20 +0,0 @@ -ifdef::doctype-manpage[] -ifdef::backend-docbook[] -[header] -template::[header-declarations] -<refentry> - <refentryinfo> - <date>{bee_date}</date> - </refentryinfo> - <refmeta> - <refentrytitle>{mantitle}</refentrytitle> - <manvolnum>{manvolnum}</manvolnum> - <refmiscinfo class="source">BitlBee</refmiscinfo> - <refmiscinfo class="manual">BitlBee manual</refmiscinfo> - </refmeta> - <refnamediv> - <refname>{manname}</refname> - <refpurpose>{manpurpose}</refpurpose> - </refnamediv> -endif::backend-docbook[] -endif::doctype-manpage[] diff --git a/protocols/skype/client.sh b/protocols/skype/client.sh deleted file mode 100644 index 7d7689a8..00000000 --- a/protocols/skype/client.sh +++ /dev/null @@ -1 +0,0 @@ -openssl s_client -host localhost -port 2727 -verify 0 diff --git a/protocols/skype/skype.c b/protocols/skype/skype.c deleted file mode 100644 index bd8a1850..00000000 --- a/protocols/skype/skype.c +++ /dev/null @@ -1,1778 +0,0 @@ -/* - * skype.c - Skype plugin for BitlBee - * - * Copyright (c) 2007-2013 by Miklos Vajna <vmiklos@vmiklos.hu> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, - * USA. - */ - -#define _XOPEN_SOURCE -#include <poll.h> -#include <stdio.h> -#include <bitlbee.h> -#include <ssl_client.h> - -#define SKYPE_DEFAULT_SERVER "localhost" -#define SKYPE_DEFAULT_PORT "2727" -#define IRC_LINE_SIZE 16384 -#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) - -/* - * Enumerations - */ - -enum { - SKYPE_CALL_RINGING = 1, - SKYPE_CALL_MISSED, - SKYPE_CALL_CANCELLED, - SKYPE_CALL_FINISHED, - SKYPE_CALL_REFUSED -}; - -enum { - SKYPE_FILETRANSFER_NEW = 1, - SKYPE_FILETRANSFER_TRANSFERRING, - SKYPE_FILETRANSFER_COMPLETED, - SKYPE_FILETRANSFER_FAILED -}; - -/* - * Structures - */ - -struct skype_data { - struct im_connection *ic; - char *username; - /* The effective file descriptor. We store it here so any function can - * write() to it. */ - int fd; - /* File descriptor returned by bitlbee. we store it so we know when - * we're connected and when we aren't. */ - int bfd; - /* ssl_getfd() uses this to get the file desciptor. */ - void *ssl; - /* When we receive a new message id, we query the properties, finally - * the chatname. Store the properties here so that we can use - * imcb_buddy_msg() when we got the chatname. */ - char *handle; - /* List, because of multiline messages. */ - GList *body; - char *type; - /* This is necessary because we send a notification when we get the - * handle. So we store the state here and then we can send a - * notification about the handle is in a given status. */ - int call_status; - char *call_id; - char *call_duration; - /* If the call is outgoing or not */ - int call_out; - /* Same for file transfers. */ - int filetransfer_status; - /* Path of the file being transferred. */ - char *filetransfer_path; - /* Using /j #nick we want to have a groupchat with two people. Usually - * not (default). */ - char *groupchat_with; - /* The user who invited us to the chat. */ - char *adder; - /* If we are waiting for a confirmation about we changed the topic. */ - int topic_wait; - /* These are used by the info command. */ - char *info_fullname; - char *info_phonehome; - char *info_phoneoffice; - char *info_phonemobile; - char *info_nrbuddies; - char *info_tz; - char *info_seen; - char *info_birthday; - char *info_sex; - char *info_language; - char *info_country; - char *info_province; - char *info_city; - char *info_homepage; - char *info_about; - /* When a call fails, we get the reason and later we get the failure - * event, so store the failure code here till then */ - int failurereason; - /* If this is just an update of an already received message. */ - int is_edit; - /* List of struct skype_group* */ - GList *groups; - /* Pending user which has to be added to the next group which is - * created. */ - char *pending_user; - /* If the info command was used, to determine what to do with FULLNAME result. */ - int is_info; -}; - -struct skype_away_state { - char *code; - char *full_name; -}; - -struct skype_buddy_ask_data { - struct im_connection *ic; - /* This is also used for call IDs for simplicity */ - char *handle; -}; - -struct skype_group { - int id; - char *name; - GList *users; -}; - -/* - * Tables - */ - -const struct skype_away_state skype_away_state_list[] = { - { "AWAY", "Away" }, - { "NA", "Not available" }, - { "DND", "Do Not Disturb" }, - { "INVISIBLE", "Invisible" }, - { "OFFLINE", "Offline" }, - { "SKYPEME", "Skype Me" }, - { "ONLINE", "Online" }, - { NULL, NULL } -}; - -/* - * Functions - */ - -int skype_write(struct im_connection *ic, char *buf, int len) -{ - struct skype_data *sd = ic->proto_data; - struct pollfd pfd[1]; - - if (!sd->ssl) { - return FALSE; - } - - pfd[0].fd = sd->fd; - pfd[0].events = POLLOUT; - - /* This poll is necessary or we'll get a SIGPIPE when we write() to - * sd->fd. */ - poll(pfd, 1, 1000); - if (pfd[0].revents & POLLHUP) { - imc_logout(ic, TRUE); - return FALSE; - } - ssl_write(sd->ssl, buf, len); - - return TRUE; -} - -int skype_printf(struct im_connection *ic, char *fmt, ...) -{ - va_list args; - char str[IRC_LINE_SIZE]; - - va_start(args, fmt); - g_vsnprintf(str, IRC_LINE_SIZE, fmt, args); - va_end(args); - - return skype_write(ic, str, strlen(str)); -} - -static void skype_buddy_ask_yes(void *data) -{ - struct skype_buddy_ask_data *bla = data; - - skype_printf(bla->ic, "SET USER %s ISAUTHORIZED TRUE\n", - bla->handle); - g_free(bla->handle); - g_free(bla); -} - -static void skype_buddy_ask_no(void *data) -{ - struct skype_buddy_ask_data *bla = data; - - skype_printf(bla->ic, "SET USER %s ISAUTHORIZED FALSE\n", - bla->handle); - g_free(bla->handle); - g_free(bla); -} - -void skype_buddy_ask(struct im_connection *ic, char *handle, char *message) -{ - struct skype_buddy_ask_data *bla = g_new0(struct skype_buddy_ask_data, - 1); - char *buf; - - bla->ic = ic; - bla->handle = g_strdup(handle); - - buf = g_strdup_printf("The user %s wants to add you to his/her buddy list, saying: '%s'.", handle, message); - imcb_ask(ic, buf, bla, skype_buddy_ask_yes, skype_buddy_ask_no); - g_free(buf); -} - -static void skype_call_ask_yes(void *data) -{ - struct skype_buddy_ask_data *bla = data; - - skype_printf(bla->ic, "SET CALL %s STATUS INPROGRESS\n", - bla->handle); - g_free(bla->handle); - g_free(bla); -} - -static void skype_call_ask_no(void *data) -{ - struct skype_buddy_ask_data *bla = data; - - skype_printf(bla->ic, "SET CALL %s STATUS FINISHED\n", - bla->handle); - g_free(bla->handle); - g_free(bla); -} - -void skype_call_ask(struct im_connection *ic, char *call_id, char *message) -{ - struct skype_buddy_ask_data *bla = g_new0(struct skype_buddy_ask_data, - 1); - - bla->ic = ic; - bla->handle = g_strdup(call_id); - - imcb_ask(ic, message, bla, skype_call_ask_yes, skype_call_ask_no); -} - -static char *skype_call_strerror(int err) -{ - switch (err) { - case 1: - return "Miscellaneous error"; - case 2: - return "User or phone number does not exist."; - case 3: - return "User is offline"; - case 4: - return "No proxy found"; - case 5: - return "Session terminated."; - case 6: - return "No common codec found."; - case 7: - return "Sound I/O error."; - case 8: - return "Problem with remote sound device."; - case 9: - return "Call blocked by recipient."; - case 10: - return "Recipient not a friend."; - case 11: - return "Current user not authorized by recipient."; - case 12: - return "Sound recording error."; - default: - return "Unknown error"; - } -} - -static char *skype_group_by_username(struct im_connection *ic, char *username) -{ - struct skype_data *sd = ic->proto_data; - int i, j; - - /* NEEDSWORK: we just search for the first group of the user, multiple - * groups / user is not yet supported by BitlBee. */ - - for (i = 0; i < g_list_length(sd->groups); i++) { - struct skype_group *sg = g_list_nth_data(sd->groups, i); - for (j = 0; j < g_list_length(sg->users); j++) { - if (!strcmp(g_list_nth_data(sg->users, j), username)) { - return sg->name; - } - } - } - return NULL; -} - -static struct skype_group *skype_group_by_name(struct im_connection *ic, char *name) -{ - struct skype_data *sd = ic->proto_data; - int i; - - for (i = 0; i < g_list_length(sd->groups); i++) { - struct skype_group *sg = g_list_nth_data(sd->groups, i); - if (!strcmp(sg->name, name)) { - return sg; - } - } - return NULL; -} - -static struct groupchat *skype_chat_get_or_create(struct im_connection *ic, char *id) -{ - struct skype_data *sd = ic->proto_data; - struct groupchat *gc = bee_chat_by_title(ic->bee, ic, id); - - if (!gc) { - gc = imcb_chat_new(ic, id); - imcb_chat_name_hint(gc, id); - imcb_chat_add_buddy(gc, sd->username); - - skype_printf(ic, "GET CHAT %s ADDER\n", id); - skype_printf(ic, "GET CHAT %s TOPIC\n", id); - skype_printf(ic, "GET CHAT %s ACTIVEMEMBERS\n", id); - } - - return gc; -} - -static void skype_parse_users(struct im_connection *ic, char *line) -{ - char **i, **nicks; - - nicks = g_strsplit(line + 6, ", ", 0); - for (i = nicks; *i; i++) { - skype_printf(ic, "GET USER %s ONLINESTATUS\n", *i); - skype_printf(ic, "GET USER %s FULLNAME\n", *i); - } - g_strfreev(nicks); -} - -static void skype_parse_user(struct im_connection *ic, char *line) -{ - int flags = 0; - char *ptr; - struct skype_data *sd = ic->proto_data; - char *user = strchr(line, ' '); - char *status = strrchr(line, ' '); - - status++; - ptr = strchr(++user, ' '); - if (!ptr) { - return; - } - *ptr = '\0'; - ptr++; - if (!strncmp(ptr, "ONLINESTATUS ", 13)) { - if (!strlen(user) || !strcmp(user, sd->username)) { - return; - } - if (!set_getbool(&ic->acc->set, "test_join") - && !strcmp(user, "echo123")) { - return; - } - ptr = g_strdup_printf("%s@skype.com", user); - imcb_add_buddy(ic, ptr, skype_group_by_username(ic, user)); - if (strcmp(status, "OFFLINE") && (strcmp(status, "SKYPEOUT") || - !set_getbool(&ic->acc->set, "skypeout_offline"))) { - flags |= OPT_LOGGED_IN; - } - if (strcmp(status, "ONLINE") && strcmp(status, "SKYPEME")) { - flags |= OPT_AWAY; - } - imcb_buddy_status(ic, ptr, flags, NULL, NULL); - g_free(ptr); - } else if (!strncmp(ptr, "RECEIVEDAUTHREQUEST ", 20)) { - char *message = ptr + 20; - if (strlen(message)) { - skype_buddy_ask(ic, user, message); - } - } else if (!strncmp(ptr, "BUDDYSTATUS ", 12)) { - char *st = ptr + 12; - if (!strcmp(st, "3")) { - char *buf = g_strdup_printf("%s@skype.com", user); - imcb_add_buddy(ic, buf, skype_group_by_username(ic, user)); - g_free(buf); - } - } else if (!strncmp(ptr, "MOOD_TEXT ", 10)) { - char *buf = g_strdup_printf("%s@skype.com", user); - bee_user_t *bu = bee_user_by_handle(ic->bee, ic, buf); - g_free(buf); - buf = ptr + 10; - if (bu) { - imcb_buddy_status(ic, bu->handle, bu->flags, NULL, - *buf ? buf : NULL); - } - if (set_getbool(&ic->acc->set, "show_moods")) { - imcb_log(ic, "User `%s' changed mood text to `%s'", user, buf); - } - } else if (!strncmp(ptr, "FULLNAME ", 9)) { - char *name = ptr + 9; - if (sd->is_info) { - sd->is_info = FALSE; - sd->info_fullname = g_strdup(name); - } else { - char *buf = g_strdup_printf("%s@skype.com", user); - imcb_rename_buddy(ic, buf, name); - g_free(buf); - } - } else if (!strncmp(ptr, "PHONE_HOME ", 11)) { - sd->info_phonehome = g_strdup(ptr + 11); - } else if (!strncmp(ptr, "PHONE_OFFICE ", 13)) { - sd->info_phoneoffice = g_strdup(ptr + 13); - } else if (!strncmp(ptr, "PHONE_MOBILE ", 13)) { - sd->info_phonemobile = g_strdup(ptr + 13); - } else if (!strncmp(ptr, "NROF_AUTHED_BUDDIES ", 20)) { - sd->info_nrbuddies = g_strdup(ptr + 20); - } else if (!strncmp(ptr, "TIMEZONE ", 9)) { - sd->info_tz = g_strdup(ptr + 9); - } else if (!strncmp(ptr, "LASTONLINETIMESTAMP ", 20)) { - sd->info_seen = g_strdup(ptr + 20); - } else if (!strncmp(ptr, "SEX ", 4)) { - sd->info_sex = g_strdup(ptr + 4); - } else if (!strncmp(ptr, "LANGUAGE ", 9)) { - sd->info_language = g_strdup(ptr + 9); - } else if (!strncmp(ptr, "COUNTRY ", 8)) { - sd->info_country = g_strdup(ptr + 8); - } else if (!strncmp(ptr, "PROVINCE ", 9)) { - sd->info_province = g_strdup(ptr + 9); - } else if (!strncmp(ptr, "CITY ", 5)) { - sd->info_city = g_strdup(ptr + 5); - } else if (!strncmp(ptr, "HOMEPAGE ", 9)) { - sd->info_homepage = g_strdup(ptr + 9); - } else if (!strncmp(ptr, "ABOUT ", 6)) { - /* Support multiple about lines. */ - if (!sd->info_about) { - sd->info_about = g_strdup(ptr + 6); - } else { - GString *st = g_string_new(sd->info_about); - g_string_append_printf(st, "\n%s", ptr + 6); - g_free(sd->info_about); - sd->info_about = g_strdup(st->str); - g_string_free(st, TRUE); - } - } else if (!strncmp(ptr, "BIRTHDAY ", 9)) { - sd->info_birthday = g_strdup(ptr + 9); - - GString *st = g_string_new("Contact Information\n"); - g_string_append_printf(st, "Skype Name: %s\n", user); - if (sd->info_fullname) { - if (strlen(sd->info_fullname)) { - g_string_append_printf(st, "Full Name: %s\n", - sd->info_fullname); - } - g_free(sd->info_fullname); - sd->info_fullname = NULL; - } - if (sd->info_phonehome) { - if (strlen(sd->info_phonehome)) { - g_string_append_printf(st, "Home Phone: %s\n", - sd->info_phonehome); - } - g_free(sd->info_phonehome); - sd->info_phonehome = NULL; - } - if (sd->info_phoneoffice) { - if (strlen(sd->info_phoneoffice)) { - g_string_append_printf(st, "Office Phone: %s\n", - sd->info_phoneoffice); - } - g_free(sd->info_phoneoffice); - sd->info_phoneoffice = NULL; - } - if (sd->info_phonemobile) { - if (strlen(sd->info_phonemobile)) { - g_string_append_printf(st, "Mobile Phone: %s\n", - sd->info_phonemobile); - } - g_free(sd->info_phonemobile); - sd->info_phonemobile = NULL; - } - g_string_append_printf(st, "Personal Information\n"); - if (sd->info_nrbuddies) { - if (strlen(sd->info_nrbuddies)) { - g_string_append_printf(st, - "Contacts: %s\n", sd->info_nrbuddies); - } - g_free(sd->info_nrbuddies); - sd->info_nrbuddies = NULL; - } - if (sd->info_tz) { - if (strlen(sd->info_tz)) { - char ib[256]; - time_t t = time(NULL); - t += atoi(sd->info_tz) - (60 * 60 * 24); - struct tm *gt = gmtime(&t); - strftime(ib, 256, "%H:%M:%S", gt); - g_string_append_printf(st, - "Local Time: %s\n", ib); - } - g_free(sd->info_tz); - sd->info_tz = NULL; - } - if (sd->info_seen) { - if (strlen(sd->info_seen)) { - char ib[256]; - time_t it = atoi(sd->info_seen); - struct tm *tm = localtime(&it); - strftime(ib, 256, ("%Y. %m. %d. %H:%M"), tm); - g_string_append_printf(st, - "Last Seen: %s\n", ib); - } - g_free(sd->info_seen); - sd->info_seen = NULL; - } - if (sd->info_birthday) { - if (strlen(sd->info_birthday) && - strcmp(sd->info_birthday, "0")) { - char ib[256]; - struct tm tm; - strptime(sd->info_birthday, "%Y%m%d", &tm); - strftime(ib, 256, "%B %d, %Y", &tm); - g_string_append_printf(st, - "Birthday: %s\n", ib); - - strftime(ib, 256, "%Y", &tm); - int year = atoi(ib); - time_t t = time(NULL); - struct tm *lt = localtime(&t); - g_string_append_printf(st, - "Age: %d\n", lt->tm_year + 1900 - year); - } - g_free(sd->info_birthday); - sd->info_birthday = NULL; - } - if (sd->info_sex) { - if (strlen(sd->info_sex)) { - char *iptr = sd->info_sex; - while (*iptr++) { - *iptr = g_ascii_tolower(*iptr); - } - g_string_append_printf(st, - "Gender: %s\n", sd->info_sex); - } - g_free(sd->info_sex); - sd->info_sex = NULL; - } - if (sd->info_language) { - if (strlen(sd->info_language)) { - char *iptr = strchr(sd->info_language, ' '); - if (iptr) { - iptr++; - } else { - iptr = sd->info_language; - } - g_string_append_printf(st, - "Language: %s\n", iptr); - } - g_free(sd->info_language); - sd->info_language = NULL; - } - if (sd->info_country) { - if (strlen(sd->info_country)) { - char *iptr = strchr(sd->info_country, ' '); - if (iptr) { - iptr++; - } else { - iptr = sd->info_country; - } - g_string_append_printf(st, - "Country: %s\n", iptr); - } - g_free(sd->info_country); - sd->info_country = NULL; - } - if (sd->info_province) { - if (strlen(sd->info_province)) { - g_string_append_printf(st, - "Region: %s\n", sd->info_province); - } - g_free(sd->info_province); - sd->info_province = NULL; - } - if (sd->info_city) { - if (strlen(sd->info_city)) { - g_string_append_printf(st, - "City: %s\n", sd->info_city); - } - g_free(sd->info_city); - sd->info_city = NULL; - } - if (sd->info_homepage) { - if (strlen(sd->info_homepage)) { - g_string_append_printf(st, - "Homepage: %s\n", sd->info_homepage); - } - g_free(sd->info_homepage); - sd->info_homepage = NULL; - } - if (sd->info_about) { - if (strlen(sd->info_about)) { - g_string_append_printf(st, "%s\n", - sd->info_about); - } - g_free(sd->info_about); - sd->info_about = NULL; - } - imcb_log(ic, "%s", st->str); - g_string_free(st, TRUE); - } -} - -static void skype_parse_chatmessage_said_emoted(struct im_connection *ic, struct groupchat *gc, char *body) -{ - struct skype_data *sd = ic->proto_data; - char buf[IRC_LINE_SIZE]; - - if (!strcmp(sd->type, "SAID")) { - if (!sd->is_edit) { - g_snprintf(buf, IRC_LINE_SIZE, "%s", body); - } else { - g_snprintf(buf, IRC_LINE_SIZE, "%s %s", set_getstr(&ic->acc->set, "edit_prefix"), body); - sd->is_edit = 0; - } - } else { - g_snprintf(buf, IRC_LINE_SIZE, "/me %s", body); - } - if (!gc) { - /* Private message */ - imcb_buddy_msg(ic, sd->handle, buf, 0, 0); - } else { - /* Groupchat message */ - imcb_chat_msg(gc, sd->handle, buf, 0, 0); - } -} - -static void skype_parse_chatmessage(struct im_connection *ic, char *line) -{ - struct skype_data *sd = ic->proto_data; - char *id = strchr(line, ' '); - - if (!++id) { - return; - } - char *info = strchr(id, ' '); - - if (!info) { - return; - } - *info = '\0'; - info++; - if (!strcmp(info, "STATUS RECEIVED") || !strncmp(info, "EDITED_TIMESTAMP", 16)) { - /* New message ID: - * (1) Request its from field - * (2) Request its body - * (3) Request its type - * (4) Query chatname - */ - skype_printf(ic, "GET CHATMESSAGE %s FROM_HANDLE\n", id); - if (!strcmp(info, "STATUS RECEIVED")) { - skype_printf(ic, "GET CHATMESSAGE %s BODY\n", id); - } else { - sd->is_edit = 1; - } - skype_printf(ic, "GET CHATMESSAGE %s TYPE\n", id); - skype_printf(ic, "GET CHATMESSAGE %s CHATNAME\n", id); - } else if (!strncmp(info, "FROM_HANDLE ", 12)) { - info += 12; - /* New from field value. Store - * it, then we can later use it - * when we got the message's - * body. */ - g_free(sd->handle); - sd->handle = g_strdup_printf("%s@skype.com", info); - } else if (!strncmp(info, "EDITED_BY ", 10)) { - info += 10; - /* This is the same as - * FROM_HANDLE, except that we - * never request these lines - * from Skype, we just get - * them. */ - g_free(sd->handle); - sd->handle = g_strdup_printf("%s@skype.com", info); - } else if (!strncmp(info, "BODY ", 5)) { - info += 5; - sd->body = g_list_append(sd->body, g_strdup(info)); - } else if (!strncmp(info, "TYPE ", 5)) { - info += 5; - g_free(sd->type); - sd->type = g_strdup(info); - } else if (!strncmp(info, "CHATNAME ", 9)) { - info += 9; - if (sd->handle && sd->body && sd->type) { - struct groupchat *gc = skype_chat_get_or_create(ic, info); - int i; - for (i = 0; i < g_list_length(sd->body); i++) { - char *body = g_list_nth_data(sd->body, i); - if (!strcmp(sd->type, "SAID") || - !strcmp(sd->type, "EMOTED")) { - skype_parse_chatmessage_said_emoted(ic, gc, body); - } else if (!strcmp(sd->type, "SETTOPIC") && gc) { - imcb_chat_topic(gc, - sd->handle, body, 0); - } else if (!strcmp(sd->type, "LEFT") && gc) { - imcb_chat_remove_buddy(gc, - sd->handle, NULL); - } - } - g_list_free(sd->body); - sd->body = NULL; - } - } -} - -static void skype_parse_call(struct im_connection *ic, char *line) -{ - struct skype_data *sd = ic->proto_data; - char *id = strchr(line, ' '); - char buf[IRC_LINE_SIZE]; - - if (!++id) { - return; - } - char *info = strchr(id, ' '); - - if (!info) { - return; - } - *info = '\0'; - info++; - if (!strncmp(info, "FAILUREREASON ", 14)) { - sd->failurereason = atoi(strchr(info, ' ')); - } else if (!strcmp(info, "STATUS RINGING")) { - if (sd->call_id) { - g_free(sd->call_id); - } - sd->call_id = g_strdup(id); - skype_printf(ic, "GET CALL %s PARTNER_HANDLE\n", id); - sd->call_status = SKYPE_CALL_RINGING; - } else if (!strcmp(info, "STATUS MISSED")) { - skype_printf(ic, "GET CALL %s PARTNER_HANDLE\n", id); - sd->call_status = SKYPE_CALL_MISSED; - } else if (!strcmp(info, "STATUS CANCELLED")) { - skype_printf(ic, "GET CALL %s PARTNER_HANDLE\n", id); - sd->call_status = SKYPE_CALL_CANCELLED; - } else if (!strcmp(info, "STATUS FINISHED")) { - skype_printf(ic, "GET CALL %s PARTNER_HANDLE\n", id); - sd->call_status = SKYPE_CALL_FINISHED; - } else if (!strcmp(info, "STATUS REFUSED")) { - skype_printf(ic, "GET CALL %s PARTNER_HANDLE\n", id); - sd->call_status = SKYPE_CALL_REFUSED; - } else if (!strcmp(info, "STATUS UNPLACED")) { - if (sd->call_id) { - g_free(sd->call_id); - } - /* Save the ID for later usage (Cancel/Finish). */ - sd->call_id = g_strdup(id); - sd->call_out = TRUE; - } else if (!strcmp(info, "STATUS FAILED")) { - imcb_error(ic, "Call failed: %s", - skype_call_strerror(sd->failurereason)); - sd->call_id = NULL; - } else if (!strncmp(info, "DURATION ", 9)) { - if (sd->call_duration) { - g_free(sd->call_duration); - } - sd->call_duration = g_strdup(info + 9); - } else if (!strncmp(info, "PARTNER_HANDLE ", 15)) { - info += 15; - if (!sd->call_status) { - return; - } - switch (sd->call_status) { - case SKYPE_CALL_RINGING: - if (sd->call_out) { - imcb_log(ic, "You are currently ringing the user %s.", info); - } else { - g_snprintf(buf, IRC_LINE_SIZE, - "The user %s is currently ringing you.", - info); - skype_call_ask(ic, sd->call_id, buf); - } - break; - case SKYPE_CALL_MISSED: - imcb_log(ic, "You have missed a call from user %s.", - info); - break; - case SKYPE_CALL_CANCELLED: - imcb_log(ic, "You cancelled the call to the user %s.", - info); - sd->call_status = 0; - sd->call_out = FALSE; - break; - case SKYPE_CALL_REFUSED: - if (sd->call_out) { - imcb_log(ic, "The user %s refused the call.", - info); - } else { - imcb_log(ic, - "You refused the call from user %s.", - info); - } - sd->call_out = FALSE; - break; - case SKYPE_CALL_FINISHED: - if (sd->call_duration) { - imcb_log(ic, - "You finished the call to the user %s " - "(duration: %s seconds).", - info, sd->call_duration); - } else { - imcb_log(ic, - "You finished the call to the user %s.", - info); - } - sd->call_out = FALSE; - break; - default: - /* Don't be noisy, ignore other statuses for now. */ - break; - } - sd->call_status = 0; - } -} - -static void skype_parse_filetransfer(struct im_connection *ic, char *line) -{ - struct skype_data *sd = ic->proto_data; - char *id = strchr(line, ' '); - - if (!++id) { - return; - } - char *info = strchr(id, ' '); - - if (!info) { - return; - } - *info = '\0'; - info++; - if (!strcmp(info, "STATUS NEW")) { - skype_printf(ic, "GET FILETRANSFER %s PARTNER_HANDLE\n", - id); - sd->filetransfer_status = SKYPE_FILETRANSFER_NEW; - } else if (!strcmp(info, "STATUS FAILED")) { - skype_printf(ic, "GET FILETRANSFER %s PARTNER_HANDLE\n", - id); - sd->filetransfer_status = SKYPE_FILETRANSFER_FAILED; - } else if (!strcmp(info, "STATUS COMPLETED")) { - skype_printf(ic, "GET FILETRANSFER %s PARTNER_HANDLE\n", id); - sd->filetransfer_status = SKYPE_FILETRANSFER_COMPLETED; - } else if (!strcmp(info, "STATUS TRANSFERRING")) { - skype_printf(ic, "GET FILETRANSFER %s PARTNER_HANDLE\n", id); - sd->filetransfer_status = SKYPE_FILETRANSFER_TRANSFERRING; - } else if (!strncmp(info, "FILEPATH ", 9)) { - info += 9; - sd->filetransfer_path = g_strdup(info); - } else if (!strncmp(info, "PARTNER_HANDLE ", 15)) { - info += 15; - if (!sd->filetransfer_status) { - return; - } - switch (sd->filetransfer_status) { - case SKYPE_FILETRANSFER_NEW: - imcb_log(ic, "The user %s offered a new file for you.", - info); - break; - case SKYPE_FILETRANSFER_FAILED: - imcb_log(ic, "Failed to transfer file from user %s.", - info); - break; - case SKYPE_FILETRANSFER_COMPLETED: - imcb_log(ic, "File transfer from user %s completed.", info); - break; - case SKYPE_FILETRANSFER_TRANSFERRING: - if (sd->filetransfer_path) { - imcb_log(ic, "File transfer from user %s started, saving to %s.", info, - sd->filetransfer_path); - g_free(sd->filetransfer_path); - sd->filetransfer_path = NULL; - } - break; - } - sd->filetransfer_status = 0; - } -} - -static struct skype_group *skype_group_by_id(struct im_connection *ic, int id) -{ - struct skype_data *sd = ic->proto_data; - int i; - - for (i = 0; i < g_list_length(sd->groups); i++) { - struct skype_group *sg = (struct skype_group *) g_list_nth_data(sd->groups, i); - - if (sg->id == id) { - return sg; - } - } - return NULL; -} - -static void skype_group_free(struct skype_group *sg, gboolean usersonly) -{ - int i; - - for (i = 0; i < g_list_length(sg->users); i++) { - char *user = g_list_nth_data(sg->users, i); - g_free(user); - } - sg->users = NULL; - if (usersonly) { - return; - } - g_free(sg->name); - g_free(sg); -} - -/* Update the group of each user in this group */ -static void skype_group_users(struct im_connection *ic, struct skype_group *sg) -{ - int i; - - for (i = 0; i < g_list_length(sg->users); i++) { - char *user = g_list_nth_data(sg->users, i); - char *buf = g_strdup_printf("%s@skype.com", user); - imcb_add_buddy(ic, buf, sg->name); - g_free(buf); - } -} - -static void skype_parse_group(struct im_connection *ic, char *line) -{ - struct skype_data *sd = ic->proto_data; - char *id = strchr(line, ' '); - - if (!++id) { - return; - } - - char *info = strchr(id, ' '); - - if (!info) { - return; - } - *info = '\0'; - info++; - - if (!strncmp(info, "DISPLAYNAME ", 12)) { - info += 12; - - /* Name given for a group ID: try to update it or insert a new - * one if not found */ - struct skype_group *sg = skype_group_by_id(ic, atoi(id)); - if (sg) { - g_free(sg->name); - sg->name = g_strdup(info); - } else { - sg = g_new0(struct skype_group, 1); - sg->id = atoi(id); - sg->name = g_strdup(info); - sd->groups = g_list_append(sd->groups, sg); - } - } else if (!strncmp(info, "USERS ", 6)) { - struct skype_group *sg = skype_group_by_id(ic, atoi(id)); - - if (sg) { - char **i; - char **users = g_strsplit(info + 6, ", ", 0); - - skype_group_free(sg, TRUE); - i = users; - while (*i) { - sg->users = g_list_append(sg->users, g_strdup(*i)); - i++; - } - g_strfreev(users); - skype_group_users(ic, sg); - } else { - log_message(LOGLVL_ERROR, - "No skype group with id %s. That's probably a bug.", id); - } - } else if (!strncmp(info, "NROFUSERS ", 10)) { - if (!sd->pending_user) { - /* Number of users changed in this group, query its type to see - * if it's a custom one we should care about. */ - skype_printf(ic, "GET GROUP %s TYPE\n", id); - return; - } - - /* This is a newly created group, we have a single user - * to add. */ - struct skype_group *sg = skype_group_by_id(ic, atoi(id)); - - if (sg) { - skype_printf(ic, "ALTER GROUP %d ADDUSER %s\n", sg->id, sd->pending_user); - g_free(sd->pending_user); - sd->pending_user = NULL; - } else { - log_message(LOGLVL_ERROR, - "No skype group with id %s. That's probably a bug.", id); - } - } else if (!strcmp(info, "TYPE CUSTOM_GROUP")) { - /* This one is interesting, query its users. */ - skype_printf(ic, "GET GROUP %s USERS\n", id); - } -} - -static void skype_parse_chat(struct im_connection *ic, char *line) -{ - struct skype_data *sd = ic->proto_data; - char buf[IRC_LINE_SIZE]; - char *id = strchr(line, ' '); - - if (!++id) { - return; - } - struct groupchat *gc; - char *info = strchr(id, ' '); - - if (!info) { - return; - } - *info = '\0'; - info++; - /* Remove fake chat if we created one in skype_chat_with() */ - gc = bee_chat_by_title(ic->bee, ic, ""); - if (gc) { - imcb_chat_free(gc); - } - if (!strcmp(info, "STATUS MULTI_SUBSCRIBED")) { - skype_chat_get_or_create(ic, id); - } else if (!strcmp(info, "STATUS DIALOG") && sd->groupchat_with) { - gc = skype_chat_get_or_create(ic, id); - /* According to the docs this - * is necessary. However it - * does not seem the situation - * and it would open an extra - * window on our client, so - * just leave it out. */ - /*skype_printf(ic, "OPEN CHAT %s\n", id);*/ - g_snprintf(buf, IRC_LINE_SIZE, "%s@skype.com", - sd->groupchat_with); - imcb_chat_add_buddy(gc, buf); - g_free(sd->groupchat_with); - sd->groupchat_with = NULL; - } else if (!strcmp(info, "STATUS UNSUBSCRIBED")) { - gc = bee_chat_by_title(ic->bee, ic, id); - if (gc) { - gc->data = (void *) FALSE; - } - } else if (!strncmp(info, "ADDER ", 6)) { - info += 6; - g_free(sd->adder); - sd->adder = g_strdup_printf("%s@skype.com", info); - } else if (!strncmp(info, "TOPIC ", 6)) { - info += 6; - gc = bee_chat_by_title(ic->bee, ic, id); - if (gc && (sd->adder || sd->topic_wait)) { - if (sd->topic_wait) { - sd->adder = g_strdup(sd->username); - sd->topic_wait = 0; - } - imcb_chat_topic(gc, sd->adder, info, 0); - g_free(sd->adder); - sd->adder = NULL; - } - } else if (!strncmp(info, "MEMBERS ", 8) || !strncmp(info, "ACTIVEMEMBERS ", 14)) { - if (!strncmp(info, "MEMBERS ", 8)) { - info += 8; - } else { - info += 14; - } - gc = bee_chat_by_title(ic->bee, ic, id); - /* Hack! We set ->data to TRUE - * while we're on the channel - * so that we won't rejoin - * after a /part. */ - if (!gc || gc->data) { - return; - } - char **members = g_strsplit(info, " ", 0); - int i; - for (i = 0; members[i]; i++) { - if (!strcmp(members[i], sd->username)) { - continue; - } - g_snprintf(buf, IRC_LINE_SIZE, "%s@skype.com", - members[i]); - if (!g_list_find_custom(gc->in_room, buf, - (GCompareFunc) strcmp)) { - imcb_chat_add_buddy(gc, buf); - } - } - imcb_chat_add_buddy(gc, sd->username); - g_strfreev(members); - } -} - -static void skype_parse_password(struct im_connection *ic, char *line) -{ - if (!strncmp(line + 9, "OK", 2)) { - imcb_connected(ic); - } else { - imcb_error(ic, "Authentication Failed"); - imc_logout(ic, TRUE); - } -} - -static void skype_parse_profile(struct im_connection *ic, char *line) -{ - imcb_log(ic, "SkypeOut balance value is '%s'.", line + 21); -} - -static void skype_parse_ping(struct im_connection *ic, char *line) -{ - /* Unused parameter */ - line = line; - skype_printf(ic, "PONG\n"); -} - -static void skype_parse_chats(struct im_connection *ic, char *line) -{ - char **i; - char **chats = g_strsplit(line + 6, ", ", 0); - - i = chats; - while (*i) { - skype_printf(ic, "GET CHAT %s STATUS\n", *i); - skype_printf(ic, "GET CHAT %s ACTIVEMEMBERS\n", *i); - i++; - } - g_strfreev(chats); -} - -static void skype_parse_groups(struct im_connection *ic, char *line) -{ - if (!set_getbool(&ic->acc->set, "read_groups")) { - return; - } - - char **i; - char **groups = g_strsplit(line + 7, ", ", 0); - - i = groups; - while (*i) { - skype_printf(ic, "GET GROUP %s DISPLAYNAME\n", *i); - skype_printf(ic, "GET GROUP %s USERS\n", *i); - i++; - } - g_strfreev(groups); -} - -static void skype_parse_alter_group(struct im_connection *ic, char *line) -{ - char *id = line + strlen("ALTER GROUP"); - - if (!++id) { - return; - } - - char *info = strchr(id, ' '); - - if (!info) { - return; - } - *info = '\0'; - info++; - - if (!strncmp(info, "ADDUSER ", 8)) { - struct skype_group *sg = skype_group_by_id(ic, atoi(id)); - - info += 8; - if (sg) { - char *buf = g_strdup_printf("%s@skype.com", info); - sg->users = g_list_append(sg->users, g_strdup(info)); - imcb_add_buddy(ic, buf, sg->name); - g_free(buf); - } else { - log_message(LOGLVL_ERROR, - "No skype group with id %s. That's probably a bug.", id); - } - } -} - -typedef void (*skype_parser)(struct im_connection *ic, char *line); - -static gboolean skype_read_callback(gpointer data, gint fd, - b_input_condition cond) -{ - struct im_connection *ic = data; - struct skype_data *sd = ic->proto_data; - char buf[IRC_LINE_SIZE]; - int st, i; - char **lines, **lineptr, *line; - static struct parse_map { - char *k; - skype_parser v; - } parsers[] = { - { "USERS ", skype_parse_users }, - { "USER ", skype_parse_user }, - { "CHATMESSAGE ", skype_parse_chatmessage }, - { "CALL ", skype_parse_call }, - { "FILETRANSFER ", skype_parse_filetransfer }, - { "CHAT ", skype_parse_chat }, - { "GROUP ", skype_parse_group }, - { "PASSWORD ", skype_parse_password }, - { "PROFILE PSTN_BALANCE ", skype_parse_profile }, - { "PING", skype_parse_ping }, - { "CHATS ", skype_parse_chats }, - { "GROUPS ", skype_parse_groups }, - { "ALTER GROUP ", skype_parse_alter_group }, - }; - - /* Unused parameters */ - fd = fd; - cond = cond; - - if (!sd || sd->fd == -1) { - return FALSE; - } - /* Read the whole data. */ - st = ssl_read(sd->ssl, buf, sizeof(buf)); - if (st >= IRC_LINE_SIZE - 1) { - /* As we don't buffer incoming data, if IRC_LINE_SIZE amount of bytes - * were received, there's a good chance last message was truncated - * and the next recv() will yield garbage. */ - imcb_error(ic, "Unable to handle incoming data from skyped"); - st = 0; - } - if (st > 0) { - buf[st] = '\0'; - /* Then split it up to lines. */ - lines = g_strsplit(buf, "\n", 0); - lineptr = lines; - while ((line = *lineptr)) { - if (!strlen(line)) { - break; - } - if (set_getbool(&ic->acc->set, "skypeconsole_receive")) { - imcb_buddy_msg(ic, "skypeconsole", line, 0, 0); - } - for (i = 0; i < ARRAY_SIZE(parsers); i++) { - if (!strncmp(line, parsers[i].k, - strlen(parsers[i].k))) { - parsers[i].v(ic, line); - break; - } - } - lineptr++; - } - g_strfreev(lines); - } else if (st == 0 || (st < 0 && !ssl_sockerr_again(sd->ssl))) { - ssl_disconnect(sd->ssl); - sd->fd = -1; - sd->ssl = NULL; - - imcb_error(ic, "Error while reading from server"); - imc_logout(ic, TRUE); - return FALSE; - } - return TRUE; -} - -gboolean skype_start_stream(struct im_connection *ic) -{ - struct skype_data *sd = ic->proto_data; - int st; - - if (!sd) { - return FALSE; - } - - if (sd->bfd <= 0) { - sd->bfd = b_input_add(sd->fd, B_EV_IO_READ, - skype_read_callback, ic); - } - - /* Log in */ - skype_printf(ic, "USERNAME %s\n", ic->acc->user); - skype_printf(ic, "PASSWORD %s\n", ic->acc->pass); - - /* This will download all buddies and groups. */ - st = skype_printf(ic, "SEARCH GROUPS CUSTOM\n"); - skype_printf(ic, "SEARCH FRIENDS\n"); - - skype_printf(ic, "SET USERSTATUS ONLINE\n"); - - /* Auto join to bookmarked chats if requested.*/ - if (set_getbool(&ic->acc->set, "auto_join")) { - skype_printf(ic, "SEARCH BOOKMARKEDCHATS\n"); - skype_printf(ic, "SEARCH ACTIVECHATS\n"); - skype_printf(ic, "SEARCH MISSEDCHATS\n"); - skype_printf(ic, "SEARCH RECENTCHATS\n"); - } - return st; -} - -gboolean skype_connected(gpointer data, int returncode, void *source, b_input_condition cond) -{ - struct im_connection *ic = data; - struct skype_data *sd = ic->proto_data; - - /* Unused parameter */ - cond = cond; - - if (!source) { - sd->ssl = NULL; - imcb_error(ic, "Could not connect to server"); - imc_logout(ic, TRUE); - return FALSE; - } - imcb_log(ic, "Connected to server, logging in"); - - return skype_start_stream(ic); -} - -static void skype_login(account_t *acc) -{ - struct im_connection *ic = imcb_new(acc); - struct skype_data *sd = g_new0(struct skype_data, 1); - - ic->proto_data = sd; - - imcb_log(ic, "Connecting"); - sd->ssl = ssl_connect(set_getstr(&acc->set, "server"), - set_getint(&acc->set, "port"), FALSE, skype_connected, ic); - sd->fd = sd->ssl ? ssl_getfd(sd->ssl) : -1; - sd->username = g_strdup(acc->user); - - sd->ic = ic; - - if (set_getbool(&acc->set, "skypeconsole")) { - imcb_add_buddy(ic, "skypeconsole", NULL); - } -} - -static void skype_logout(struct im_connection *ic) -{ - struct skype_data *sd = ic->proto_data; - int i; - - skype_printf(ic, "SET USERSTATUS OFFLINE\n"); - - while (ic->groupchats) { - imcb_chat_free(ic->groupchats->data); - } - - for (i = 0; i < g_list_length(sd->groups); i++) { - struct skype_group *sg = (struct skype_group *) g_list_nth_data(sd->groups, i); - skype_group_free(sg, FALSE); - } - - if (sd->ssl) { - ssl_disconnect(sd->ssl); - } - - g_free(sd->username); - g_free(sd->handle); - g_free(sd); - ic->proto_data = NULL; -} - -static int skype_buddy_msg(struct im_connection *ic, char *who, char *message, - int flags) -{ - char *ptr, *nick; - int st; - - /* Unused parameter */ - flags = flags; - - nick = g_strdup(who); - ptr = strchr(nick, '@'); - if (ptr) { - *ptr = '\0'; - } - - if (!strncmp(who, "skypeconsole", 12)) { - st = skype_printf(ic, "%s\n", message); - } else { - st = skype_printf(ic, "MESSAGE %s %s\n", nick, message); - } - g_free(nick); - - return st; -} - -const struct skype_away_state *skype_away_state_by_name(char *name) -{ - int i; - - for (i = 0; skype_away_state_list[i].full_name; i++) { - if (g_strcasecmp(skype_away_state_list[i].full_name, name) == 0) { - return skype_away_state_list + i; - } - } - - return NULL; -} - -static void skype_set_away(struct im_connection *ic, char *state_txt, - char *message) -{ - const struct skype_away_state *state; - - /* Unused parameter */ - message = message; - - if (state_txt == NULL) { - state = skype_away_state_by_name("Online"); - } else { - state = skype_away_state_by_name(state_txt); - } - skype_printf(ic, "SET USERSTATUS %s\n", state->code); -} - -static GList *skype_away_states(struct im_connection *ic) -{ - static GList *l; - int i; - - /* Unused parameter */ - ic = ic; - - if (l == NULL) { - for (i = 0; skype_away_state_list[i].full_name; i++) { - l = g_list_append(l, - (void *) skype_away_state_list[i].full_name); - } - } - - return l; -} - -static char *skype_set_display_name(set_t *set, char *value) -{ - account_t *acc = set->data; - struct im_connection *ic = acc->ic; - - skype_printf(ic, "SET PROFILE FULLNAME %s\n", value); - return value; -} - -static char *skype_set_mood_text(set_t *set, char *value) -{ - account_t *acc = set->data; - struct im_connection *ic = acc->ic; - - skype_printf(ic, "SET PROFILE MOOD_TEXT %s\n", value); - return value; -} - -static char *skype_set_balance(set_t *set, char *value) -{ - account_t *acc = set->data; - struct im_connection *ic = acc->ic; - - skype_printf(ic, "GET PROFILE PSTN_BALANCE\n"); - return value; -} - -static void skype_call(struct im_connection *ic, char *value) -{ - char *nick = g_strdup(value); - char *ptr = strchr(nick, '@'); - - if (ptr) { - *ptr = '\0'; - } - skype_printf(ic, "CALL %s\n", nick); - g_free(nick); -} - -static void skype_hangup(struct im_connection *ic) -{ - struct skype_data *sd = ic->proto_data; - - if (sd->call_id) { - skype_printf(ic, "SET CALL %s STATUS FINISHED\n", - sd->call_id); - g_free(sd->call_id); - sd->call_id = 0; - } else { - imcb_error(ic, "There are no active calls currently."); - } -} - -static char *skype_set_call(set_t *set, char *value) -{ - account_t *acc = set->data; - struct im_connection *ic = acc->ic; - - if (value) { - skype_call(ic, value); - } else { - skype_hangup(ic); - } - return value; -} - -static void skype_add_buddy(struct im_connection *ic, char *who, char *group) -{ - struct skype_data *sd = ic->proto_data; - char *nick, *ptr; - - nick = g_strdup(who); - ptr = strchr(nick, '@'); - if (ptr) { - *ptr = '\0'; - } - - if (!group) { - skype_printf(ic, "SET USER %s BUDDYSTATUS 2 Please authorize me\n", - nick); - g_free(nick); - } else { - struct skype_group *sg = skype_group_by_name(ic, group); - - if (!sg) { - /* No such group, we need to create it, then have to - * add the user once it's created. */ - skype_printf(ic, "CREATE GROUP %s\n", group); - sd->pending_user = g_strdup(nick); - } else { - skype_printf(ic, "ALTER GROUP %d ADDUSER %s\n", sg->id, nick); - } - } -} - -static void skype_remove_buddy(struct im_connection *ic, char *who, char *group) -{ - char *nick, *ptr; - - /* Unused parameter */ - group = group; - - nick = g_strdup(who); - ptr = strchr(nick, '@'); - if (ptr) { - *ptr = '\0'; - } - skype_printf(ic, "SET USER %s BUDDYSTATUS 1\n", nick); - g_free(nick); -} - -void skype_chat_msg(struct groupchat *gc, char *message, int flags) -{ - struct im_connection *ic = gc->ic; - - /* Unused parameter */ - flags = flags; - - skype_printf(ic, "CHATMESSAGE %s %s\n", gc->title, message); -} - -void skype_chat_leave(struct groupchat *gc) -{ - struct im_connection *ic = gc->ic; - - skype_printf(ic, "ALTER CHAT %s LEAVE\n", gc->title); - gc->data = (void *) TRUE; -} - -void skype_chat_invite(struct groupchat *gc, char *who, char *message) -{ - struct im_connection *ic = gc->ic; - char *ptr, *nick; - - nick = g_strdup(who); - ptr = strchr(nick, '@'); - if (ptr) { - *ptr = '\0'; - } - skype_printf(ic, "ALTER CHAT %s ADDMEMBERS %s\n", gc->title, nick); - g_free(nick); -} - -void skype_chat_topic(struct groupchat *gc, char *message) -{ - struct im_connection *ic = gc->ic; - struct skype_data *sd = ic->proto_data; - - skype_printf(ic, "ALTER CHAT %s SETTOPIC %s\n", - gc->title, message); - sd->topic_wait = 1; -} - -struct groupchat *skype_chat_with(struct im_connection *ic, char *who) -{ - struct skype_data *sd = ic->proto_data; - char *ptr, *nick; - - nick = g_strdup(who); - ptr = strchr(nick, '@'); - if (ptr) { - *ptr = '\0'; - } - skype_printf(ic, "CHAT CREATE %s\n", nick); - sd->groupchat_with = g_strdup(nick); - g_free(nick); - /* We create a fake chat for now. We will replace it with a real one in - * the real callback. */ - return imcb_chat_new(ic, ""); -} - -static void skype_get_info(struct im_connection *ic, char *who) -{ - struct skype_data *sd = ic->proto_data; - char *ptr, *nick; - - nick = g_strdup(who); - ptr = strchr(nick, '@'); - if (ptr) { - *ptr = '\0'; - } - sd->is_info = TRUE; - skype_printf(ic, "GET USER %s FULLNAME\n", nick); - skype_printf(ic, "GET USER %s PHONE_HOME\n", nick); - skype_printf(ic, "GET USER %s PHONE_OFFICE\n", nick); - skype_printf(ic, "GET USER %s PHONE_MOBILE\n", nick); - skype_printf(ic, "GET USER %s NROF_AUTHED_BUDDIES\n", nick); - skype_printf(ic, "GET USER %s TIMEZONE\n", nick); - skype_printf(ic, "GET USER %s LASTONLINETIMESTAMP\n", nick); - skype_printf(ic, "GET USER %s SEX\n", nick); - skype_printf(ic, "GET USER %s LANGUAGE\n", nick); - skype_printf(ic, "GET USER %s COUNTRY\n", nick); - skype_printf(ic, "GET USER %s PROVINCE\n", nick); - skype_printf(ic, "GET USER %s CITY\n", nick); - skype_printf(ic, "GET USER %s HOMEPAGE\n", nick); - skype_printf(ic, "GET USER %s ABOUT\n", nick); - /* - * Hack: we query the bithday property which is always a single line, - * so we can send the collected properties to the user when we have - * this one. - */ - skype_printf(ic, "GET USER %s BIRTHDAY\n", nick); -} - -static void skype_init(account_t *acc) -{ - set_t *s; - - s = set_add(&acc->set, "server", SKYPE_DEFAULT_SERVER, set_eval_account, - acc); - s->flags |= ACC_SET_OFFLINE_ONLY; - - s = set_add(&acc->set, "port", SKYPE_DEFAULT_PORT, set_eval_int, acc); - s->flags |= ACC_SET_OFFLINE_ONLY; - - s = set_add(&acc->set, "display_name", NULL, skype_set_display_name, - acc); - s->flags |= SET_NOSAVE | ACC_SET_ONLINE_ONLY; - - s = set_add(&acc->set, "mood_text", NULL, skype_set_mood_text, acc); - s->flags |= SET_NOSAVE | ACC_SET_ONLINE_ONLY; - - s = set_add(&acc->set, "call", NULL, skype_set_call, acc); - s->flags |= SET_NOSAVE | ACC_SET_ONLINE_ONLY; - - s = set_add(&acc->set, "balance", NULL, skype_set_balance, acc); - s->flags |= SET_NOSAVE | ACC_SET_ONLINE_ONLY; - - s = set_add(&acc->set, "skypeout_offline", "true", set_eval_bool, acc); - - s = set_add(&acc->set, "skypeconsole", "false", set_eval_bool, acc); - s->flags |= ACC_SET_OFFLINE_ONLY; - - s = set_add(&acc->set, "skypeconsole_receive", "false", set_eval_bool, - acc); - s->flags |= ACC_SET_OFFLINE_ONLY; - - s = set_add(&acc->set, "auto_join", "false", set_eval_bool, acc); - s->flags |= ACC_SET_OFFLINE_ONLY; - - s = set_add(&acc->set, "test_join", "false", set_eval_bool, acc); - s->flags |= ACC_SET_OFFLINE_ONLY; - - s = set_add(&acc->set, "show_moods", "false", set_eval_bool, acc); - - s = set_add(&acc->set, "edit_prefix", "EDIT:", - NULL, acc); - - s = set_add(&acc->set, "read_groups", "false", set_eval_bool, acc); -} - -#if BITLBEE_VERSION_CODE > BITLBEE_VER(3, 0, 1) -GList *skype_buddy_action_list(bee_user_t *bu) -{ - static GList *ret; - - /* Unused parameter */ - bu = bu; - - if (ret == NULL) { - static const struct buddy_action ba[2] = { - { "CALL", "Initiate a call" }, - { "HANGUP", "Hang up a call" }, - }; - int i; - - for (i = 0; i < ARRAY_SIZE(ba); i++) { - ret = g_list_prepend(ret, (void *) (ba + i)); - } - } - - return ret; -} - -void *skype_buddy_action(struct bee_user *bu, const char *action, char * const args[], void *data) -{ - /* Unused parameters */ - args = args; - data = data; - - if (!g_strcasecmp(action, "CALL")) { - skype_call(bu->ic, bu->handle); - } else if (!g_strcasecmp(action, "HANGUP")) { - skype_hangup(bu->ic); - } - - return NULL; -} -#endif - -void init_plugin(void) -{ - struct prpl *ret = g_new0(struct prpl, 1); - - ret->name = "skype"; - ret->login = skype_login; - ret->init = skype_init; - ret->logout = skype_logout; - ret->buddy_msg = skype_buddy_msg; - ret->get_info = skype_get_info; - ret->away_states = skype_away_states; - ret->set_away = skype_set_away; - ret->add_buddy = skype_add_buddy; - ret->remove_buddy = skype_remove_buddy; - ret->chat_msg = skype_chat_msg; - ret->chat_leave = skype_chat_leave; - ret->chat_invite = skype_chat_invite; - ret->chat_with = skype_chat_with; - ret->handle_cmp = g_strcasecmp; - ret->chat_topic = skype_chat_topic; -#if BITLBEE_VERSION_CODE > BITLBEE_VER(3, 0, 1) - ret->buddy_action_list = skype_buddy_action_list; - ret->buddy_action = skype_buddy_action; -#endif - register_protocol(ret); -} - -struct plugin_info *init_plugin_info(void) -{ - static struct plugin_info info = { - BITLBEE_ABI_VERSION_CODE, - "skype", - BITLBEE_VERSION, - "Skype protocol plugin", - NULL, - NULL - }; - - return &info; -} diff --git a/protocols/skype/skyped.1 b/protocols/skype/skyped.1 deleted file mode 100644 index d7542184..00000000 --- a/protocols/skype/skyped.1 +++ /dev/null @@ -1,207 +0,0 @@ -'\" t -.\" Title: skyped -.\" Author: [see the "AUTHOR" section] -.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/> -.\" Date: 123 -.\" Manual: BitlBee manual -.\" Source: BitlBee -.\" Language: English -.\" -.TH "SKYPED" "1" "123" "BitlBee" "BitlBee manual" -.\" ----------------------------------------------------------------- -.\" * Define some portability stuff -.\" ----------------------------------------------------------------- -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.\" http://bugs.debian.org/507673 -.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.ie \n(.g .ds Aq \(aq -.el .ds Aq ' -.\" ----------------------------------------------------------------- -.\" * set default formatting -.\" ----------------------------------------------------------------- -.\" disable hyphenation -.nh -.\" disable justification (adjust text to left margin only) -.ad l -.\" ----------------------------------------------------------------- -.\" * MAIN CONTENT STARTS HERE * -.\" ----------------------------------------------------------------- -.SH "NAME" -skyped \- allows remote control of the Skype GUI client -.SH "SYNOPSIS" -.sp -skyped [<options>] -.SH "DESCRIPTION" -.sp -Skype supports remote control of the GUI client only via X11 or DBus messages\&. This is hard in case you want remote control\&. This daemon listens on a TCP port and runs on the same machine where the GUI client runs\&. It passes all the input it gets to Skype directly, except for a few commands which is related to authentication\&. The whole communication is done via SSL\&. -.SH "CONFIGURATION" -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -Set up -~/\&.skyped/skyped\&.conf: Create the -~/\&.skyped -directory, copy -skyped\&.conf -and -skyped\&.cnf -from -/usr/local/etc/skyped/ -to -~/\&.skyped, adjust -username -and -password\&. The -username -should be your Skype login and the -password -can be whatever you want, but you will have to specify that one when adding the Skype account to BitlBee (see later)\&. -.RE -.if n \{\ -.sp -.\} -.RS 4 -.it 1 an-trap -.nr an-no-space-flag 1 -.nr an-break-flag 1 -.br -.ps +1 -\fBNote\fR -.ps -1 -.br -.sp -Here, and later \- /usr/local/etc can be different on your installation if you used the \-\-sysconfdir switch when running the configure of BitlBee\&. -.sp .5v -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -Generate the SSL pem files: -.RE -.sp -.if n \{\ -.RS 4 -.\} -.nf -$ cd ~/\&.skyped -$ openssl req \-new \-x509 \-days 365 \-nodes \-config skyped\&.cnf \-out skyped\&.cert\&.pem \e - \-keyout skyped\&.key\&.pem -.fi -.if n \{\ -.RE -.\} -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -Start -skyped -(the TCP server), initially without detaching and enabling debug messages: -.RE -.sp -.if n \{\ -.RS 4 -.\} -.nf -$ skyped \-d \-n -.fi -.if n \{\ -.RE -.\} -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -Start your -IRC -client, connect to BitlBee and add your account: -.RE -.sp -.if n \{\ -.RS 4 -.\} -.nf -account add skype <user> <pass> -.fi -.if n \{\ -.RE -.\} -.sp -<user> should be your Skype account name, <pass> should be the one you declared in skyped\&.conf\&. -.SH "OPTIONS" -.PP -\-c, \-\-config -.RS 4 -Path to configuration file (default: $HOME/\&.skyped/skyped\&.conf) -.RE -.PP -\-d, \-\-debug -.RS 4 -Enable debug messages -.RE -.PP -\-h, \-\-help -.RS 4 -Show short summary of options -.RE -.PP -\-H, \-\-host -.RS 4 -Set the tcp host (default: 0\&.0\&.0\&.0) -.RE -.PP -\-l, \-\-log -.RS 4 -Set the log file in background mode (default: none) -.RE -.PP -\-m, \-\-mock=<file> -.RS 4 -Mock mode: replay session from file, instead of connecting to Skype\&. -.RE -.PP -\-n, \-\-nofork -.RS 4 -Don\(cqt run as daemon in the background -.RE -.PP -\-s, \-\-dont\-start\-skype -.RS 4 -Assume that skype is running independently, don\(cqt try to start/stop it\&. -.RE -.PP -\-p, \-\-port -.RS 4 -Set the tcp port (default: 2727) -.RE -.PP -\-v, \-\-version -.RS 4 -Display version information -.RE -.SH "AUTHOR" -.sp -Written by Miklos Vajna <vmiklos@vmiklos\&.hu> diff --git a/protocols/skype/skyped.cnf b/protocols/skype/skyped.cnf deleted file mode 100644 index c7dc9098..00000000 --- a/protocols/skype/skyped.cnf +++ /dev/null @@ -1,40 +0,0 @@ -# create RSA certs - Server - -RANDFILE = skyped.rnd - -[ req ] -default_bits = 1024 -encrypt_key = yes -distinguished_name = req_dn -x509_extensions = cert_type - -[ req_dn ] -countryName = Country Name (2 letter code) -countryName_default = HU -countryName_min = 2 -countryName_max = 2 - -stateOrProvinceName = State or Province Name (full name) -stateOrProvinceName_default = Some-State - -localityName = Locality Name (eg, city) - -0.organizationName = Organization Name (eg, company) -0.organizationName_default = Stunnel Developers Ltd - -organizationalUnitName = Organizational Unit Name (eg, section) -#organizationalUnitName_default = - -0.commonName = Common Name (FQDN of your server) -0.commonName_default = localhost - -# To create a certificate for more than one name uncomment: -# 1.commonName = DNS alias of your server -# 2.commonName = DNS alias of your server -# ... -# See http://home.netscape.com/eng/security/ssl_2.0_certificate.html -# to see how Netscape understands commonName. - -[ cert_type ] -nsCertType = server - diff --git a/protocols/skype/skyped.conf.dist b/protocols/skype/skyped.conf.dist deleted file mode 100644 index 21e07796..00000000 --- a/protocols/skype/skyped.conf.dist +++ /dev/null @@ -1,10 +0,0 @@ -[skyped] -# change to your skype username -username = john -# use `echo -n foo|sha1sum` to generate this hash for your password -password = 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 - -# you have to change the following paths to your home directory: -cert = /home/YOUR_USER/.skyped/skyped.cert.pem -key = /home/YOUR_USER/.skyped/skyped.key.pem -port = 2727 diff --git a/protocols/skype/skyped.py b/protocols/skype/skyped.py deleted file mode 100644 index c9bb103b..00000000 --- a/protocols/skype/skyped.py +++ /dev/null @@ -1,523 +0,0 @@ -#!/usr/bin/env python2.7 -# -# skyped.py -# -# Copyright (c) 2007-2013 by Miklos Vajna <vmiklos@vmiklos.hu> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -# USA. -# - -import sys -import os -import signal -import time -import socket -import Skype4Py -import hashlib -from ConfigParser import ConfigParser, NoOptionError -from traceback import print_exception -from fcntl import fcntl, F_SETFD, FD_CLOEXEC -import ssl - -__version__ = "0.1.1" - -try: - import gobject - hasgobject = True -except ImportError: - import select - import threading - hasgobject = False - -def eh(type, value, tb): - global options - - if type != KeyboardInterrupt: - print_exception(type, value, tb) - if hasgobject: - gobject.MainLoop().quit() - if options.conn: - options.conn.close() - if not options.dont_start_skype: - # shut down client if it's running - try: - skype.skype.Client.Shutdown() - except NameError: - pass - sys.exit("Exiting.") - -sys.excepthook = eh - -def wait_for_lock(lock, timeout_to_print, timeout, msg): - start = time.time() - locked = lock.acquire(0) - while not(locked): - time.sleep(0.5) - if timeout_to_print and (time.time() - timeout_to_print > start): - dprint("%s: Waited %f seconds" % \ - (msg, time.time() - start)) - timeout_to_print = False - if timeout and (time.time() - timeout > start): - dprint("%s: Waited %f seconds, giving up" % \ - (msg, time.time() - start)) - return False - locked = lock.acquire(0) - return True - -def input_handler(fd, io_condition = None): - global options - global skype - if options.buf: - for i in options.buf: - skype.send(i.strip()) - options.buf = None - if not hasgobject: - return True - else: - if not hasgobject: - close_socket = False - if wait_for_lock(options.lock, 3, 10, "input_handler"): - try: - input = fd.recv(1024) - options.lock.release() - except Exception, s: - dprint("Warning, receiving 1024 bytes failed (%s)." % s) - fd.close() - options.conn = False - options.lock.release() - return False - for i in input.split("\n"): - if i.strip() == "SET USERSTATUS OFFLINE": - close_socket = True - skype.send(i.strip()) - return not(close_socket) - try: - input = fd.recv(1024) - except Exception, s: - dprint("Warning, receiving 1024 bytes failed (%s)." % s) - fd.close() - return False - for i in input.split("\n"): - skype.send(i.strip()) - return True - -def skype_idle_handler(skype): - try: - c = skype.skype.Command("PING", Block=True) - skype.skype.SendCommand(c) - except (Skype4Py.SkypeAPIError, AttributeError), s: - dprint("Warning, pinging Skype failed (%s)." % (s)) - time.sleep(1) - return True - -def send(sock, txt, tries=10): - global options - if hasgobject: - if not options.conn: return - try: - done = sock.sendall(txt) - except socket.error as s: - dprint("Warning, sending '%s' failed (%s)." % (txt, s)) - options.conn.close() - options.conn = False - else: - for attempt in xrange(1, tries+1): - if not options.conn: break - if wait_for_lock(options.lock, 3, 10, "socket send"): - try: - if options.conn: done = sock.sendall(txt) - options.lock.release() - except socket.error as s: - options.lock.release() - dprint("Warning, sending '%s' failed (%s). count=%d" % (txt, s, count)) - time.sleep(1) - else: - break - else: - if options.conn: - options.conn.close() - options.conn = False - return done - -def bitlbee_idle_handler(skype): - global options - done = False - if options.conn: - try: - e = "PING" - done = send(options.conn, "%s\n" % e) - except Exception, s: - dprint("Warning, sending '%s' failed (%s)." % (e, s)) - if hasgobject: - options.conn.close() - else: - if options.conn: options.conn.close() - options.conn = False - done = False - if hasgobject: - return True - else: - return done - return True - -def server(host, port, skype = None): - global options - if ":" in host: - sock = socket.socket(socket.AF_INET6) - else: - sock = socket.socket() - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - fcntl(sock, F_SETFD, FD_CLOEXEC); - sock.bind((host, port)) - sock.listen(1) - - if hasgobject: - gobject.io_add_watch(sock, gobject.IO_IN, listener) - else: - dprint("Waiting for connection...") - listener(sock, skype) - -def listener(sock, skype): - global options - if not hasgobject: - if not(wait_for_lock(options.lock, 3, 10, "listener")): return False - rawsock, addr = sock.accept() - try: - options.conn = ssl.wrap_socket(rawsock, - server_side=True, - certfile=options.config.sslcert, - keyfile=options.config.sslkey, - ssl_version=ssl.PROTOCOL_TLSv1) - except (ssl.SSLError, socket.error) as err: - if isinstance(err, ssl.SSLError): - dprint("Warning, SSL init failed, did you create your certificate?") - return False - else: - dprint('Warning, SSL init failed') - return True - if hasattr(options.conn, 'handshake'): - try: - options.conn.handshake() - except Exception: - if not hasgobject: - options.lock.release() - dprint("Warning, handshake failed, closing connection.") - return False - ret = 0 - try: - line = options.conn.recv(1024) - if line.startswith("USERNAME") and line.split(' ')[1].strip() == options.config.username: - ret += 1 - line = options.conn.recv(1024) - if line.startswith("PASSWORD") and hashlib.sha1(line.split(' ')[1].strip()).hexdigest() == options.config.password: - ret += 1 - except Exception, s: - dprint("Warning, receiving 1024 bytes failed (%s)." % s) - options.conn.close() - if not hasgobject: - options.conn = False - options.lock.release() - return False - if ret == 2: - dprint("Username and password OK.") - options.conn.send("PASSWORD OK\n") - if hasgobject: - gobject.io_add_watch(options.conn, gobject.IO_IN, input_handler) - else: - options.lock.release() - serverloop(options, skype) - return True - else: - dprint("Username and/or password WRONG.") - options.conn.send("PASSWORD KO\n") - if not hasgobject: - options.conn.close() - options.conn = False - options.lock.release() - return False - -def dprint(msg): - from time import strftime - global options - - if options.debug: - import inspect - prefix = strftime("[%Y-%m-%d %H:%M:%S]") + " %s:%d" % inspect.stack()[1][1:3] - sanitized = msg - - try: - print prefix + ": " + msg - except Exception, s: - try: - sanitized = msg.encode("ascii", "backslashreplace") - except Error, s: - try: - sanitized = "hex [" + msg.encode("hex") + "]" - except Error, s: - sanitized = "[unable to print debug message]" - print prefix + "~=" + sanitized - - if options.log: - sock = open(options.log, "a") - sock.write("%s: %s\n" % (prefix, sanitized)) - sock.close() - - sys.stdout.flush() - -class MockedSkype: - """Mock class for Skype4Py.Skype(), in case the -m option is used.""" - def __init__(self, mock): - sock = open(mock) - self.lines = sock.readlines() - - def SendCommand(self, c): - pass - - def Command(self, msg, Block): - if msg == "PING": - return ["PONG"] - line = self.lines[0].strip() - if not line.startswith(">> "): - raise Exception("Corrupted mock input") - line = line[3:] - if line != msg: - raise Exception("'%s' != '%s'" % (line, msg)) - self.lines = self.lines[1:] # drop the expected incoming line - ret = [] - while True: - # and now send back all the following lines, up to the next expected incoming line - if len(self.lines) == 0: - break - if self.lines[0].startswith(">> "): - break - if not self.lines[0].startswith("<< "): - raise Exception("Corrupted mock input") - ret.append(self.lines[0][3:].strip()) - self.lines = self.lines[1:] - return ret - -class SkypeApi: - def __init__(self, mock): - global options - if not mock: - self.skype = Skype4Py.Skype() - self.skype.OnNotify = self.recv - if not options.dont_start_skype: - self.skype.Client.Start() - else: - self.skype = MockedSkype(mock) - - def recv(self, msg_text): - global options - if msg_text == "PONG": - return - if "\n" in msg_text: - # crappy skype prefixes only the first line for - # multiline messages so we need to do so for the other - # lines, too. this is something like: - # 'CHATMESSAGE id BODY first line\nsecond line' -> - # 'CHATMESSAGE id BODY first line\nCHATMESSAGE id BODY second line' - prefix = " ".join(msg_text.split(" ")[:3]) - msg_text = ["%s %s" % (prefix, i) for i in " ".join(msg_text.split(" ")[3:]).split("\n")] - else: - msg_text = [msg_text] - for i in msg_text: - try: - # Internally, BitlBee always uses UTF-8 and encodes/decodes as - # necessary to communicate with the IRC client; thus send the - # UTF-8 it expects - e = i.encode('UTF-8') - except: - # Should never happen, but it's better to send difficult to - # read data than crash because some message couldn't be encoded - e = i.encode('ascii', 'backslashreplace') - if options.conn: - dprint('<< ' + e) - try: - send(options.conn, e + "\n") - except Exception, s: - dprint("Warning, sending '%s' failed (%s)." % (e, s)) - if options.conn: options.conn.close() - options.conn = False - else: - dprint('-- ' + e) - - def send(self, msg_text): - if not len(msg_text) or msg_text == "PONG": - if msg_text == "PONG": - options.last_bitlbee_pong = time.time() - return - try: - # Internally, BitlBee always uses UTF-8 and encodes/decodes as - # necessary to communicate with the IRC client; thus decode the - # UTF-8 it sent us - e = msg_text.decode('UTF-8') - except: - # Should never happen, but it's better to send difficult to read - # data to Skype than to crash - e = msg_text.decode('ascii', 'backslashreplace') - dprint('>> ' + e) - try: - c = self.skype.Command(e, Block=True) - self.skype.SendCommand(c) - if hasattr(c, "Reply"): - self.recv(c.Reply) # Skype4Py answer - else: - for i in c: # mock may return multiple iterable answers - self.recv(i) - except Skype4Py.SkypeError: - pass - except Skype4Py.SkypeAPIError, s: - dprint("Warning, sending '%s' failed (%s)." % (e, s)) - - -def serverloop(options, skype): - timeout = 1; # in seconds - skype_ping_period = 5 - bitlbee_ping_period = 10 - bitlbee_pong_timeout = 30 - now = time.time() - skype_ping_start_time = now - bitlbee_ping_start_time = now - options.last_bitlbee_pong = now - in_error = [] - handler_ok = True - while (len(in_error) == 0) and handler_ok and options.conn: - ready_to_read, ready_to_write, in_error = \ - select.select([options.conn], [], [options.conn], \ - timeout) - now = time.time() - handler_ok = len(in_error) == 0 - if (len(ready_to_read) == 1) and handler_ok: - handler_ok = input_handler(ready_to_read.pop()) - # don't ping bitlbee/skype if they already received data - now = time.time() # allow for the input_handler to take some time - bitlbee_ping_start_time = now - skype_ping_start_time = now - options.last_bitlbee_pong = now - if (now - skype_ping_period > skype_ping_start_time) and handler_ok: - handler_ok = skype_idle_handler(skype) - skype_ping_start_time = now - if now - bitlbee_ping_period > bitlbee_ping_start_time: - handler_ok = bitlbee_idle_handler(skype) - bitlbee_ping_start_time = now - if options.last_bitlbee_pong: - if (now - options.last_bitlbee_pong) > bitlbee_pong_timeout: - dprint("Bitlbee pong timeout") - # TODO is following line necessary? Should there be a options.conn.unwrap() somewhere? - # options.conn.shutdown() - if options.conn: - options.conn.close() - options.conn = False - else: - options.last_bitlbee_pong = now - - -def main(args=None): - global options - global skype - - cfgpath = os.path.join(os.environ['HOME'], ".skyped", "skyped.conf") - syscfgpath = "/usr/local/etc/skyped/skyped.conf" - if not os.path.exists(cfgpath) and os.path.exists(syscfgpath): - cfgpath = syscfgpath # fall back to system-wide settings - port = 2727 - - import argparse - parser = argparse.ArgumentParser() - parser.add_argument('-c', '--config', - metavar='path', default=cfgpath, - help='path to configuration file (default: %(default)s)') - parser.add_argument('-H', '--host', default='0.0.0.0', - help='set the tcp host, supports IPv4 and IPv6 (default: %(default)s)') - parser.add_argument('-p', '--port', type=int, - help='set the tcp port (default: %(default)s)') - parser.add_argument('-l', '--log', metavar='path', - help='set the log file in background mode (default: none)') - parser.add_argument('-v', '--version', action='store_true', help='display version information') - parser.add_argument('-n', '--nofork', - action='store_true', help="don't run as daemon in the background") - parser.add_argument('-s', '--dont-start-skype', action='store_true', - help="assume that skype is running independently, don't try to start/stop it") - parser.add_argument('-m', '--mock', help='fake interactions with skype (only useful for tests)') - parser.add_argument('-d', '--debug', action='store_true', help='enable debug messages') - options = parser.parse_args(sys.argv[1:] if args is None else args) - - if options.version: - print "skyped %s" % __version__ - sys.exit(0) - - # well, this is a bit hackish. we store the socket of the last connected client - # here and notify it. maybe later notify all connected clients? - options.conn = None - # this will be read first by the input handler - options.buf = None - - if not os.path.exists(options.config): - parser.error(( "Can't find configuration file at '%s'. " - "Use the -c option to specify an alternate one." )% options.config) - - cfgpath = options.config - options.config = ConfigParser() - options.config.read(cfgpath) - options.config.username = options.config.get('skyped', 'username').split('#', 1)[0] - options.config.password = options.config.get('skyped', 'password').split('#', 1)[0] - options.config.sslkey = os.path.expanduser(options.config.get('skyped', 'key').split('#', 1)[0]) - options.config.sslcert = os.path.expanduser(options.config.get('skyped', 'cert').split('#', 1)[0]) - - # hack: we have to parse the parameters first to locate the - # config file but the -p option should overwrite the value from - # the config file - try: - options.config.port = int(options.config.get('skyped', 'port').split('#', 1)[0]) - if not options.port: - options.port = options.config.port - except NoOptionError: - pass - if not options.port: - options.port = port - dprint("Parsing config file '%s' done, username is '%s'." % (cfgpath, options.config.username)) - if not options.nofork: - pid = os.fork() - if pid == 0: - nullin = file(os.devnull, 'r') - nullout = file(os.devnull, 'w') - os.dup2(nullin.fileno(), sys.stdin.fileno()) - os.dup2(nullout.fileno(), sys.stdout.fileno()) - os.dup2(nullout.fileno(), sys.stderr.fileno()) - else: - print 'skyped is started on port %s, pid: %d' % (options.port, pid) - sys.exit(0) - else: - dprint('skyped is started on port %s' % options.port) - if hasgobject: - server(options.host, options.port) - try: - skype = SkypeApi(options.mock) - except Skype4Py.SkypeAPIError, s: - sys.exit("%s. Are you sure you have started Skype?" % s) - if hasgobject: - gobject.timeout_add(2000, skype_idle_handler, skype) - gobject.timeout_add(60000, bitlbee_idle_handler, skype) - gobject.MainLoop().run() - else: - while 1: - options.conn = False - options.lock = threading.Lock() - server(options.host, options.port, skype) - - -if __name__ == '__main__': main() diff --git a/protocols/skype/skyped.txt b/protocols/skype/skyped.txt deleted file mode 100644 index c5f9abb9..00000000 --- a/protocols/skype/skyped.txt +++ /dev/null @@ -1,88 +0,0 @@ -= skyped(1) - -== NAME - -skyped - allows remote control of the Skype GUI client - -== SYNOPSIS - -skyped [<options>] - -== DESCRIPTION - -Skype supports remote control of the GUI client only via X11 or DBus -messages. This is hard in case you want remote control. This daemon -listens on a TCP port and runs on the same machine where the GUI client -runs. It passes all the input it gets to Skype directly, except for a -few commands which is related to authentication. The whole communication -is done via SSL. - -== CONFIGURATION - -- Set up `~/.skyped/skyped.conf`: Create the `~/.skyped` directory, copy - `skyped.conf` and `skyped.cnf` from `/usr/local/etc/skyped/` to `~/.skyped`, - adjust `username` and `password`. The `username` should be your Skype login and - the `password` can be whatever you want, but you will have to specify that one - when adding the Skype account to BitlBee (see later). - -NOTE: Here, and later - `/usr/local/etc` can be different on your installation -if you used the `--sysconfdir` switch when running the `configure` of BitlBee. - -- Generate the SSL pem files: - ----- -$ cd ~/.skyped -$ openssl req -new -x509 -days 365 -nodes -config skyped.cnf -out skyped.cert.pem \ - -keyout skyped.key.pem ----- - -- Start `skyped` (the TCP server), initially without detaching and enabling debug messages: - ----- -$ skyped -d -n ----- - -- Start your `IRC` client, connect to BitlBee and add your account: - ----- -account add skype <user> <pass> ----- - -`<user>` should be your Skype account name, `<pass>` should be the one you declared -in `skyped.conf`. - -== OPTIONS - --c, --config:: - Path to configuration file (default: $HOME/.skyped/skyped.conf) - --d, --debug:: - Enable debug messages - --h, --help:: - Show short summary of options - --H, --host:: - Set the tcp host (default: 0.0.0.0) - --l, --log:: - Set the log file in background mode (default: none) - --m, --mock=<file>:: - Mock mode: replay session from file, instead of connecting to Skype. - --n, --nofork:: - Don't run as daemon in the background - --s, --dont-start-skype:: - Assume that skype is running independently, don't try to start/stop it. - --p, --port:: - Set the tcp port (default: 2727) - --v, --version:: - Display version information - -== AUTHOR - -Written by Miklos Vajna <vmiklos@vmiklos.hu> diff --git a/protocols/skype/t/add-yes-bitlbee.mock b/protocols/skype/t/add-yes-bitlbee.mock deleted file mode 100644 index 60eccfc2..00000000 --- a/protocols/skype/t/add-yes-bitlbee.mock +++ /dev/null @@ -1,8 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on -<< PRIVMSG &bitlbee :add skype bob ->> :bob!bob@skype.com JOIN :&bitlbee diff --git a/protocols/skype/t/add-yes-skyped.mock b/protocols/skype/t/add-yes-skyped.mock deleted file mode 100644 index dea175a3..00000000 --- a/protocols/skype/t/add-yes-skyped.mock +++ /dev/null @@ -1,23 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123 ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> SET USER bob BUDDYSTATUS 2 Please authorize me -<< USER bob BUDDYSTATUS 2 -<< USER bob ISAUTHORIZED TRUE -<< USER bob ISBLOCKED FALSE -<< USER bob BUDDYSTATUS 2 -<< USER bob ONLINESTATUS OFFLINE -<< USER bob FULLNAME skype test203 -<< USER bob BUDDYSTATUS 3 -<< USER bob ONLINESTATUS OFFLINE -<< USER bob ONLINESTATUS ONLINE -<< USER bob TIMEZONE 90000 diff --git a/protocols/skype/t/added-no-bitlbee.mock b/protocols/skype/t/added-no-bitlbee.mock deleted file mode 100644 index f96c7ec7..00000000 --- a/protocols/skype/t/added-no-bitlbee.mock +++ /dev/null @@ -1,9 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> PRIVMSG &bitlbee :skype - New request: The user bob wants to add you -<< PRIVMSG &bitlbee :no ->> PRIVMSG &bitlbee :skype - Rejected diff --git a/protocols/skype/t/added-no-skyped.mock b/protocols/skype/t/added-no-skyped.mock deleted file mode 100644 index 0e4bfc8a..00000000 --- a/protocols/skype/t/added-no-skyped.mock +++ /dev/null @@ -1,15 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123 ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service -<< USER bob RECEIVEDAUTHREQUEST Please allow me to see when you are online ->> SET USER bob ISAUTHORIZED FALSE -<< USER bob ISAUTHORIZED FALSE diff --git a/protocols/skype/t/added-yes-bitlbee.mock b/protocols/skype/t/added-yes-bitlbee.mock deleted file mode 100644 index 690dd77b..00000000 --- a/protocols/skype/t/added-yes-bitlbee.mock +++ /dev/null @@ -1,9 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> PRIVMSG &bitlbee :skype - New request: The user bob wants to add you -<< PRIVMSG &bitlbee :yes ->> :bob!bob@skype.com JOIN :&bitlbee diff --git a/protocols/skype/t/added-yes-skyped.mock b/protocols/skype/t/added-yes-skyped.mock deleted file mode 100644 index fc3d756f..00000000 --- a/protocols/skype/t/added-yes-skyped.mock +++ /dev/null @@ -1,25 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123 ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service -<< USER bob RECEIVEDAUTHREQUEST Please allow me to see when you are online ->> SET USER bob ISAUTHORIZED TRUE -<< USER bob ISAUTHORIZED TRUE -<< USER bob RECEIVEDAUTHREQUEST -<< USER bob ISAUTHORIZED TRUE -<< USER bob ISBLOCKED FALSE -<< USER bob BUDDYSTATUS 3 -<< USER bob ONLINESTATUS OFFLINE -<< USER bob ONLINESTATUS ONLINE -<< USER bob TIMEZONE 90000 -<< USER bob FULLNAME Miklos V -<< USER bob LANGUAGE hu Hungarian -<< USER bob COUNTRY hu Hungary diff --git a/protocols/skype/t/away-set-bitlbee.mock b/protocols/skype/t/away-set-bitlbee.mock deleted file mode 100644 index 9212fcd3..00000000 --- a/protocols/skype/t/away-set-bitlbee.mock +++ /dev/null @@ -1,10 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype set skypeconsole_receive true -<< PRIVMSG &bitlbee :account skype on ->> PRIVMSG &bitlbee :skype - Logging in: Logged in -<< AWAY :work ->> PRIVMSG &bitlbee :alice: USERSTATUS AWAY diff --git a/protocols/skype/t/away-set-skyped.mock b/protocols/skype/t/away-set-skyped.mock deleted file mode 100644 index 0c2cc494..00000000 --- a/protocols/skype/t/away-set-skyped.mock +++ /dev/null @@ -1,20 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> SET USERSTATUS AWAY -<< USERSTATUS AWAY -<< USER alice ONLINESTATUS AWAY -<< USERSTATUS AWAY diff --git a/protocols/skype/t/call-bitlbee.mock b/protocols/skype/t/call-bitlbee.mock deleted file mode 100644 index 5171dd65..00000000 --- a/protocols/skype/t/call-bitlbee.mock +++ /dev/null @@ -1,11 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> :bob!bob@skype.com JOIN :&bitlbee -<< PRIVMSG bob :CALL ->> PRIVMSG &bitlbee :skype - You are currently ringing the user bob. -<< PRIVMSG bob :HANGUP ->> PRIVMSG &bitlbee :skype - You cancelled the call to the user bob. diff --git a/protocols/skype/t/call-failed-bitlbee.mock b/protocols/skype/t/call-failed-bitlbee.mock deleted file mode 100644 index 5ba71117..00000000 --- a/protocols/skype/t/call-failed-bitlbee.mock +++ /dev/null @@ -1,9 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> PRIVMSG &bitlbee :skype - Logging in: Logged in -<< PRIVMSG bob :CALL ->> PRIVMSG &bitlbee :skype - Error: Call failed: User is offline diff --git a/protocols/skype/t/call-failed-skyped.mock b/protocols/skype/t/call-failed-skyped.mock deleted file mode 100644 index 30699f91..00000000 --- a/protocols/skype/t/call-failed-skyped.mock +++ /dev/null @@ -1,21 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS OFFLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> CALL bob -<< CALL 216 STATUS UNPLACED -<< CALL 216 STATUS ROUTING -<< CALL 216 FAILUREREASON 3 -<< CALL 216 STATUS FAILED diff --git a/protocols/skype/t/call-skyped.mock b/protocols/skype/t/call-skyped.mock deleted file mode 100644 index 92947ba9..00000000 --- a/protocols/skype/t/call-skyped.mock +++ /dev/null @@ -1,26 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS OFFLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> CALL bob -<< CALL 178 STATUS UNPLACED -<< CALL 178 STATUS ROUTING -<< CALL 178 STATUS RINGING ->> GET CALL 178 PARTNER_HANDLE -<< CALL 178 PARTNER_HANDLE bob ->> SET CALL 178 STATUS FINISHED -<< CALL 178 STATUS CANCELLED ->> GET CALL 178 PARTNER_HANDLE -<< CALL 178 PARTNER_HANDLE bob diff --git a/protocols/skype/t/called-no-bitlbee.mock b/protocols/skype/t/called-no-bitlbee.mock deleted file mode 100644 index 00f7a8f8..00000000 --- a/protocols/skype/t/called-no-bitlbee.mock +++ /dev/null @@ -1,10 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> PRIVMSG &bitlbee :skype - New request: The user bob is currently ringing you. -<< PRIVMSG &bitlbee :no ->> PRIVMSG &bitlbee :skype - Rejected: The user bob is currently ringing you. ->> PRIVMSG &bitlbee :skype - You refused the call from user bob. diff --git a/protocols/skype/t/called-no-skyped.mock b/protocols/skype/t/called-no-skyped.mock deleted file mode 100644 index 5152fe9e..00000000 --- a/protocols/skype/t/called-no-skyped.mock +++ /dev/null @@ -1,24 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob -<< CALL 212 CONF_ID 0 -<< CALL 212 STATUS RINGING ->> GET CALL 212 PARTNER_HANDLE -<< CALL 212 PARTNER_HANDLE bob ->> SET CALL 212 STATUS FINISHED -<< CALL 212 STATUS REFUSED ->> GET CALL 212 PARTNER_HANDLE -<< CALL 212 PARTNER_HANDLE bob diff --git a/protocols/skype/t/called-yes-bitlbee.mock b/protocols/skype/t/called-yes-bitlbee.mock deleted file mode 100644 index 288547dd..00000000 --- a/protocols/skype/t/called-yes-bitlbee.mock +++ /dev/null @@ -1,9 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> PRIVMSG &bitlbee :skype - New request: The user bob is currently ringing you. -<< PRIVMSG &bitlbee :yes ->> PRIVMSG &bitlbee :skype - Accepted: The user bob is currently ringing you. diff --git a/protocols/skype/t/called-yes-skyped.mock b/protocols/skype/t/called-yes-skyped.mock deleted file mode 100644 index 67cdffe3..00000000 --- a/protocols/skype/t/called-yes-skyped.mock +++ /dev/null @@ -1,22 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob -<< CALL 208 CONF_ID 0 -<< CALL 208 STATUS RINGING ->> GET CALL 208 PARTNER_HANDLE -<< CALL 208 PARTNER_HANDLE bob ->> SET CALL 208 STATUS INPROGRESS -<< CALL 208 STATUS INPROGRESS diff --git a/protocols/skype/t/ctcp-help-bitlbee.mock b/protocols/skype/t/ctcp-help-bitlbee.mock deleted file mode 100644 index fa471bd3..00000000 --- a/protocols/skype/t/ctcp-help-bitlbee.mock +++ /dev/null @@ -1,9 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> :bob!bob@skype.com JOIN :&bitlbee -<< PRIVMSG bob :HELP ->> :bob!bob@skype.com NOTICE alice :HELP Supported CTCPs: HANGUP (Hang up a call), CALL (Initiate a call) diff --git a/protocols/skype/t/ctcp-help-skyped.mock b/protocols/skype/t/ctcp-help-skyped.mock deleted file mode 100644 index eacff2e6..00000000 --- a/protocols/skype/t/ctcp-help-skyped.mock +++ /dev/null @@ -1,16 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob diff --git a/protocols/skype/t/filetransfer-bitlbee.mock b/protocols/skype/t/filetransfer-bitlbee.mock deleted file mode 100644 index 0c7f5e15..00000000 --- a/protocols/skype/t/filetransfer-bitlbee.mock +++ /dev/null @@ -1,10 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> :bob!bob@skype.com JOIN :&bitlbee ->> PRIVMSG &bitlbee :skype - The user bob offered a new file for you. ->> PRIVMSG &bitlbee :skype - File transfer from user bob started, saving to /home/alice/text.odt. ->> PRIVMSG &bitlbee :skype - File transfer from user bob completed. diff --git a/protocols/skype/t/filetransfer-skyped.mock b/protocols/skype/t/filetransfer-skyped.mock deleted file mode 100644 index b24fcc94..00000000 --- a/protocols/skype/t/filetransfer-skyped.mock +++ /dev/null @@ -1,37 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob -<< FILETRANSFER 208 TYPE INCOMING -<< FILETRANSFER 208 PARTNER_HANDLE bob -<< FILETRANSFER 208 PARTNER_DISPNAME bob -<< FILETRANSFER 208 FILENAME text.odt -<< FILETRANSFER 208 STATUS NEW -<< FILETRANSFER 208 FILESIZE 83534193 -<< FILETRANSFER 208 STARTTIME 1358458276 -<< FILETRANSFER 208 FINISHTIME 0 -<< FILETRANSFER 208 BYTESPERSECOND 0 -<< FILETRANSFER 208 BYTESTRANSFERRED 0 -<< FILETRANSFER 208 FILESIZE 83534193 ->> GET FILETRANSFER 208 PARTNER_HANDLE -<< FILETRANSFER 208 PARTNER_HANDLE bob -<< FILETRANSFER 208 FILEPATH /home/alice/text.odt -<< FILETRANSFER 208 STATUS CONNECTING -<< FILETRANSFER 208 STATUS TRANSFERRING ->> GET FILETRANSFER 208 PARTNER_HANDLE -<< FILETRANSFER 208 PARTNER_HANDLE bob -<< FILETRANSFER 208 STATUS COMPLETED ->> GET FILETRANSFER 208 PARTNER_HANDLE -<< FILETRANSFER 208 PARTNER_HANDLE bob diff --git a/protocols/skype/t/group-add-bitlbee.mock b/protocols/skype/t/group-add-bitlbee.mock deleted file mode 100644 index 0de88f09..00000000 --- a/protocols/skype/t/group-add-bitlbee.mock +++ /dev/null @@ -1,14 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype set read_groups true -<< PRIVMSG &bitlbee :account skype on ->> :bob!bob@skype.com JOIN :&bitlbee ->> :cecil!cecil@skype.com JOIN :&bitlbee ->> :daniel!daniel@skype.com JOIN :&bitlbee -<< JOIN &family ->> 353 alice = &family :@alice +bob +cecil @root -<< INVITE daniel &family ->> :daniel!daniel@skype.com JOIN :&family diff --git a/protocols/skype/t/group-add-skyped.mock b/protocols/skype/t/group-add-skyped.mock deleted file mode 100644 index c47f6629..00000000 --- a/protocols/skype/t/group-add-skyped.mock +++ /dev/null @@ -1,38 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 70, 71 ->> SEARCH FRIENDS -<< USERS echo123, bob, cecil, daniel, emily ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET GROUP 70 DISPLAYNAME -<< GROUP 70 DISPLAYNAME Family ->> GET GROUP 70 USERS -<< GROUP 70 USERS bob, cecil ->> GET GROUP 71 DISPLAYNAME -<< GROUP 71 DISPLAYNAME Work ->> GET GROUP 71 USERS -<< GROUP 71 USERS daniel, emily ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> GET USER cecil ONLINESTATUS -<< USER cecil ONLINESTATUS ONLINE ->> GET USER cecil FULLNAME -<< USER cecil FULLNAME Cecil ->> GET USER daniel ONLINESTATUS -<< USER daniel ONLINESTATUS ONLINE ->> GET USER daniel FULLNAME -<< USER daniel FULLNAME Daniel ->> GET USER emily ONLINESTATUS -<< USER emily ONLINESTATUS OFFLINE ->> GET USER emily FULLNAME -<< USER emily FULLNAME Emily ->> ALTER GROUP 70 ADDUSER daniel -<< ALTER GROUP 70 ADDUSER daniel diff --git a/protocols/skype/t/group-read-bitlbee.mock b/protocols/skype/t/group-read-bitlbee.mock deleted file mode 100644 index 7ca8bbc0..00000000 --- a/protocols/skype/t/group-read-bitlbee.mock +++ /dev/null @@ -1,14 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype set read_groups true -<< PRIVMSG &bitlbee :account skype on ->> :bob!bob@skype.com JOIN :&bitlbee ->> :cecil!cecil@skype.com JOIN :&bitlbee ->> :daniel!daniel@skype.com JOIN :&bitlbee -<< JOIN &family ->> 353 alice = &family :@alice +bob +cecil @root -<< JOIN &work ->> 353 alice = &work :@alice +daniel @root diff --git a/protocols/skype/t/group-read-skyped.mock b/protocols/skype/t/group-read-skyped.mock deleted file mode 100644 index 148661a1..00000000 --- a/protocols/skype/t/group-read-skyped.mock +++ /dev/null @@ -1,36 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 70, 71 ->> SEARCH FRIENDS -<< USERS echo123, bob, cecil, daniel, emily ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET GROUP 70 DISPLAYNAME -<< GROUP 70 DISPLAYNAME Family ->> GET GROUP 70 USERS -<< GROUP 70 USERS bob, cecil ->> GET GROUP 71 DISPLAYNAME -<< GROUP 71 DISPLAYNAME Work ->> GET GROUP 71 USERS -<< GROUP 71 USERS daniel, emily ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> GET USER cecil ONLINESTATUS -<< USER cecil ONLINESTATUS ONLINE ->> GET USER cecil FULLNAME -<< USER cecil FULLNAME Cecil ->> GET USER daniel ONLINESTATUS -<< USER daniel ONLINESTATUS ONLINE ->> GET USER daniel FULLNAME -<< USER daniel FULLNAME Daniel ->> GET USER emily ONLINESTATUS -<< USER emily ONLINESTATUS OFFLINE ->> GET USER emily FULLNAME -<< USER emily FULLNAME Emily diff --git a/protocols/skype/t/groupchat-invite-bitlbee.mock b/protocols/skype/t/groupchat-invite-bitlbee.mock deleted file mode 100644 index b79a8faa..00000000 --- a/protocols/skype/t/groupchat-invite-bitlbee.mock +++ /dev/null @@ -1,11 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> :bob!bob@skype.com JOIN :&bitlbee -<< PRIVMSG &bitlbee :chat with bob ->> 353 alice = ##alice/$bob;a7ab206ec78 :@alice @root -<< INVITE cecil ##alice/$bob;a7ab206ec78 ->> cecil@skype.com JOIN :##alice/$bob;a7ab206ec78 diff --git a/protocols/skype/t/groupchat-invite-skyped.mock b/protocols/skype/t/groupchat-invite-skyped.mock deleted file mode 100644 index 472c6801..00000000 --- a/protocols/skype/t/groupchat-invite-skyped.mock +++ /dev/null @@ -1,50 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob, cecil ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> GET USER cecil ONLINESTATUS -<< USER cecil ONLINESTATUS ONLINE ->> GET USER cecil FULLNAME -<< USER cecil FULLNAME Cecil ->> CHAT CREATE bob -<< CHAT #alice/$bob;a7ab206ec78060f1 STATUS DIALOG ->> GET CHAT #alice/$bob;a7ab206ec78060f1 ADDER -<< CHAT #alice/$bob;a7ab206ec78060f1 ADDER -<< CHAT #alice/$bob;a7ab206ec78060f1 NAME #alice/$bob;a7ab206ec78060f1 ->> GET CHAT #alice/$bob;a7ab206ec78060f1 TOPIC -<< CHAT #alice/$bob;a7ab206ec78060f1 TOPIC ->> GET CHAT #alice/$bob;a7ab206ec78060f1 ACTIVEMEMBERS -<< CHAT #alice/$bob;a7ab206ec78060f1 ACTIVEMEMBERS -<< CHATMESSAGE 206 STATUS SENDING -<< CHAT #alice/$bob;a7ab206ec78060f1 STATUS DIALOG -<< CHATMEMBER 204 ROLE USER -<< CHAT #alice/$bob;a7ab206ec78060f1 MYROLE USER -<< CHAT #alice/$bob;a7ab206ec78060f1 MEMBERS bob alice -<< CHAT #alice/$bob;a7ab206ec78060f1 ACTIVEMEMBERS alice -<< CHAT #alice/$bob;a7ab206ec78060f1 STATUS DIALOG -<< CHAT #alice/$bob;a7ab206ec78060f1 TIMESTAMP 1358344213 -<< CHAT #alice/$bob;a7ab206ec78060f1 DIALOG_PARTNER bob -<< CHAT #alice/$bob;a7ab206ec78060f1 MEMBERS bob alice -<< CHAT #alice/$bob;a7ab206ec78060f1 FRIENDLYNAME bob ->> ALTER CHAT #alice/$bob;a7ab206ec78060f1 ADDMEMBERS cecil -<< ALTER CHAT ADDMEMBERS -<< CHAT #alice/$bob;a7ab206ec78060f1 STATUS MULTI_SUBSCRIBED -<< CHAT #alice/$bob;a7ab206ec78060f1 MEMBERS bob cecil alice ->> GET CHAT #alice/$bob;a7ab206ec78060f1 ADDER -<< CHAT #alice/$bob;a7ab206ec78060f1 ADDER -<< CHAT #alice/$bob;a7ab206ec78060f1 FRIENDLYNAME bob, cecil ->> GET CHAT #alice/$bob;a7ab206ec78060f1 TOPIC -<< CHAT #alice/$bob;a7ab206ec78060f1 TOPIC -<< CHATMESSAGE 210 STATUS SENDING diff --git a/protocols/skype/t/groupchat-invited-bitlbee.mock b/protocols/skype/t/groupchat-invited-bitlbee.mock deleted file mode 100644 index 344d5f71..00000000 --- a/protocols/skype/t/groupchat-invited-bitlbee.mock +++ /dev/null @@ -1,8 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> JOIN :##cecil/$bob;4d8cc996579 ->> 353 alice = ##cecil/$bob;4d8cc996579 :@alice @root diff --git a/protocols/skype/t/groupchat-invited-skyped.mock b/protocols/skype/t/groupchat-invited-skyped.mock deleted file mode 100644 index a5c754ce..00000000 --- a/protocols/skype/t/groupchat-invited-skyped.mock +++ /dev/null @@ -1,58 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob, cecil ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS OFFLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> GET USER cecil ONLINESTATUS -<< USER cecil ONLINESTATUS OFFLINE ->> GET USER cecil FULLNAME -<< USER cecil FULLNAME Cecil -<< CHAT #cecil/$bob;4d8cc9965791c6b9 NAME #cecil/$bob;4d8cc9965791c6b9 -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHATMEMBER 186 ROLE USER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 MYROLE USER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 MEMBERS bob cecil alice -<< CHAT #cecil/$bob;4d8cc9965791c6b9 FRIENDLYNAME bob, cecil -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob alice -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TIMESTAMP 1358276196 -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHATMESSAGE 188 STATUS RECEIVED ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC ->> GET CHATMESSAGE 188 FROM_HANDLE -<< CHATMESSAGE 188 FROM_HANDLE bob ->> GET CHATMESSAGE 188 BODY -<< CHATMESSAGE 188 BODY ->> GET CHATMESSAGE 188 TYPE -<< CHATMESSAGE 188 TYPE ADDEDMEMBERS ->> GET CHATMESSAGE 188 CHATNAME -<< CHATMESSAGE 188 CHATNAME #cecil/$bob;4d8cc9965791c6b9 -<< CHATMESSAGE 189 STATUS READ -<< CHATMESSAGE 189 STATUS READ -<< CHATMEMBER 186 IS_ACTIVE TRUE -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob cecil alice -<< CHATMESSAGE 190 STATUS SENT diff --git a/protocols/skype/t/groupchat-leave-bitlbee.mock b/protocols/skype/t/groupchat-leave-bitlbee.mock deleted file mode 100644 index 0a1c02df..00000000 --- a/protocols/skype/t/groupchat-leave-bitlbee.mock +++ /dev/null @@ -1,11 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype set skypeconsole_receive true -<< PRIVMSG &bitlbee :account skype on ->> JOIN :##cecil/$bob;4d8cc996579 ->> 353 alice = ##cecil/$bob;4d8cc996579 :@alice @root -<< PART ##cecil/$bob;4d8cc996579 ->> PRIVMSG &bitlbee :alice: CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS UNSUBSCRIBED diff --git a/protocols/skype/t/groupchat-leave-skyped.mock b/protocols/skype/t/groupchat-leave-skyped.mock deleted file mode 100644 index 49601c28..00000000 --- a/protocols/skype/t/groupchat-leave-skyped.mock +++ /dev/null @@ -1,57 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob, cecil ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS OFFLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> GET USER cecil ONLINESTATUS -<< USER cecil ONLINESTATUS OFFLINE ->> GET USER cecil FULLNAME -<< USER cecil FULLNAME Cecil -<< CHAT #cecil/$bob;4d8cc9965791c6b9 NAME #cecil/$bob;4d8cc9965791c6b9 -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHATMEMBER 186 ROLE USER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 MYROLE USER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 MEMBERS bob cecil alice -<< CHAT #cecil/$bob;4d8cc9965791c6b9 FRIENDLYNAME bob, cecil -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob alice -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TIMESTAMP 1358276196 -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHATMESSAGE 188 STATUS RECEIVED ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS ->> GET CHATMESSAGE 188 FROM_HANDLE -<< CHATMESSAGE 188 FROM_HANDLE bob ->> GET CHATMESSAGE 188 BODY -<< CHATMESSAGE 188 BODY ->> GET CHATMESSAGE 188 TYPE -<< CHATMESSAGE 188 TYPE ADDEDMEMBERS ->> GET CHATMESSAGE 188 CHATNAME -<< CHATMESSAGE 188 CHATNAME #cecil/$bob;4d8cc9965791c6b9 -<< CHATMESSAGE 189 STATUS READ -<< CHATMESSAGE 189 STATUS READ -<< CHATMEMBER 186 IS_ACTIVE TRUE -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob cecil alice -<< CHATMESSAGE 190 STATUS SENT ->> ALTER CHAT #cecil/$bob;4d8cc9965791c6b9 LEAVE -<< ALTER CHAT LEAVE -<< CHAT #cecil/$bob;4d8cc9965791c6b9 MEMBERS bob cecil -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob cecil -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS UNSUBSCRIBED diff --git a/protocols/skype/t/groupchat-msg-bitlbee.mock b/protocols/skype/t/groupchat-msg-bitlbee.mock deleted file mode 100644 index 114084ba..00000000 --- a/protocols/skype/t/groupchat-msg-bitlbee.mock +++ /dev/null @@ -1,11 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype set skypeconsole_receive true -<< PRIVMSG &bitlbee :account skype on ->> JOIN :##cecil/$bob;4d8cc996579 ->> 353 alice = ##cecil/$bob;4d8cc996579 :@alice @root -<< PRIVMSG ##cecil/$bob;4d8cc996579 :hello ->> PRIVMSG &bitlbee :alice: CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVITY_TIMESTAMP diff --git a/protocols/skype/t/groupchat-msg-skyped.mock b/protocols/skype/t/groupchat-msg-skyped.mock deleted file mode 100644 index c49604a2..00000000 --- a/protocols/skype/t/groupchat-msg-skyped.mock +++ /dev/null @@ -1,54 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob, cecil ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS OFFLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> GET USER cecil ONLINESTATUS -<< USER cecil ONLINESTATUS OFFLINE ->> GET USER cecil FULLNAME -<< USER cecil FULLNAME Cecil -<< CHAT #cecil/$bob;4d8cc9965791c6b9 NAME #cecil/$bob;4d8cc9965791c6b9 -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHATMEMBER 186 ROLE USER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 MYROLE USER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 MEMBERS bob cecil alice -<< CHAT #cecil/$bob;4d8cc9965791c6b9 FRIENDLYNAME bob, cecil -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob alice -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TIMESTAMP 1358276196 -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHATMESSAGE 188 STATUS RECEIVED ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob cecil alice ->> GET CHATMESSAGE 188 FROM_HANDLE -<< CHATMESSAGE 188 FROM_HANDLE bob ->> GET CHATMESSAGE 188 BODY -<< CHATMESSAGE 188 BODY ->> GET CHATMESSAGE 188 TYPE -<< CHATMESSAGE 188 TYPE ADDEDMEMBERS ->> GET CHATMESSAGE 188 CHATNAME -<< CHATMESSAGE 188 CHATNAME #cecil/$bob;4d8cc9965791c6b9 -<< CHATMESSAGE 189 STATUS READ -<< CHATMESSAGE 189 STATUS READ -<< CHATMEMBER 186 IS_ACTIVE TRUE -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob cecil alice -<< CHATMESSAGE 190 STATUS SENT ->> CHATMESSAGE #cecil/$bob;4d8cc9965791c6b9 hello -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVITY_TIMESTAMP 1364652882 diff --git a/protocols/skype/t/groupchat-topic-bitlbee.mock b/protocols/skype/t/groupchat-topic-bitlbee.mock deleted file mode 100644 index fe995448..00000000 --- a/protocols/skype/t/groupchat-topic-bitlbee.mock +++ /dev/null @@ -1,10 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> JOIN :##cecil/$bob;4d8cc996579 ->> 353 alice = ##cecil/$bob;4d8cc996579 :@alice @root -<< TOPIC ##cecil/$bob;4d8cc996579 :topic ->> TOPIC ##cecil/$bob;4d8cc996579 :topic diff --git a/protocols/skype/t/groupchat-topic-skyped.mock b/protocols/skype/t/groupchat-topic-skyped.mock deleted file mode 100644 index 26c4b53b..00000000 --- a/protocols/skype/t/groupchat-topic-skyped.mock +++ /dev/null @@ -1,60 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob, cecil ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS OFFLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> GET USER cecil ONLINESTATUS -<< USER cecil ONLINESTATUS OFFLINE ->> GET USER cecil FULLNAME -<< USER cecil FULLNAME Cecil -<< CHAT #cecil/$bob;4d8cc9965791c6b9 NAME #cecil/$bob;4d8cc9965791c6b9 -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHATMEMBER 186 ROLE USER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 MYROLE USER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 MEMBERS bob cecil alice -<< CHAT #cecil/$bob;4d8cc9965791c6b9 FRIENDLYNAME bob, cecil -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob alice -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TIMESTAMP 1358276196 -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED -<< CHATMESSAGE 188 STATUS RECEIVED ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob ->> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC ->> GET CHATMESSAGE 188 FROM_HANDLE -<< CHATMESSAGE 188 FROM_HANDLE bob ->> GET CHATMESSAGE 188 BODY -<< CHATMESSAGE 188 BODY ->> GET CHATMESSAGE 188 TYPE -<< CHATMESSAGE 188 TYPE ADDEDMEMBERS ->> GET CHATMESSAGE 188 CHATNAME -<< CHATMESSAGE 188 CHATNAME #cecil/$bob;4d8cc9965791c6b9 -<< CHATMESSAGE 189 STATUS READ -<< CHATMESSAGE 189 STATUS READ -<< CHATMEMBER 186 IS_ACTIVE TRUE -<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob cecil alice -<< CHATMESSAGE 190 STATUS SENT ->> ALTER CHAT #cecil/$bob;4d8cc9965791c6b9 SETTOPIC topic -<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC topic diff --git a/protocols/skype/t/info-bitlbee.mock b/protocols/skype/t/info-bitlbee.mock deleted file mode 100644 index ae52fbad..00000000 --- a/protocols/skype/t/info-bitlbee.mock +++ /dev/null @@ -1,9 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> :bob!bob@skype.com JOIN :&bitlbee -<< PRIVMSG &bitlbee :info bob ->> PRIVMSG &bitlbee :Full Name: Bob diff --git a/protocols/skype/t/info-skyped.mock b/protocols/skype/t/info-skyped.mock deleted file mode 100644 index 63076b09..00000000 --- a/protocols/skype/t/info-skyped.mock +++ /dev/null @@ -1,46 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> GET USER bob PHONE_HOME -<< USER bob PHONE_HOME ->> GET USER bob PHONE_OFFICE -<< USER bob PHONE_OFFICE ->> GET USER bob PHONE_MOBILE -<< USER bob PHONE_MOBILE ->> GET USER bob NROF_AUTHED_BUDDIES -<< USER bob NROF_AUTHED_BUDDIES 145 ->> GET USER bob TIMEZONE -<< USER bob TIMEZONE 90000 ->> GET USER bob LASTONLINETIMESTAMP -<< USER bob LASTONLINETIMESTAMP 1358023469 ->> GET USER bob SEX -<< USER bob SEX MALE ->> GET USER bob LANGUAGE -<< USER bob LANGUAGE hu Hungarian ->> GET USER bob COUNTRY -<< USER bob COUNTRY hu Hungary ->> GET USER bob PROVINCE -<< USER bob PROVINCE ->> GET USER bob CITY -<< USER bob CITY Budapest ->> GET USER bob HOMEPAGE -<< USER bob HOMEPAGE ->> GET USER bob ABOUT -<< USER bob ABOUT ->> GET USER bob BIRTHDAY -<< USER bob BIRTHDAY 19781108 diff --git a/protocols/skype/t/login-bitlbee.mock b/protocols/skype/t/login-bitlbee.mock deleted file mode 100644 index 6952cefe..00000000 --- a/protocols/skype/t/login-bitlbee.mock +++ /dev/null @@ -1,7 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> PRIVMSG &bitlbee :skype - Logging in: Logged in diff --git a/protocols/skype/t/login-skyped.mock b/protocols/skype/t/login-skyped.mock deleted file mode 100644 index eacff2e6..00000000 --- a/protocols/skype/t/login-skyped.mock +++ /dev/null @@ -1,16 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob diff --git a/protocols/skype/t/msg-bitlbee.mock b/protocols/skype/t/msg-bitlbee.mock deleted file mode 100644 index 712a9816..00000000 --- a/protocols/skype/t/msg-bitlbee.mock +++ /dev/null @@ -1,9 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype on ->> :bob!bob@skype.com JOIN :&bitlbee -<< PRIVMSG &bitlbee :bob: foo ->> :bob!bob@skype.com PRIVMSG &bitlbee :alice: bar diff --git a/protocols/skype/t/msg-skyped.mock b/protocols/skype/t/msg-skyped.mock deleted file mode 100644 index 03efb6bc..00000000 --- a/protocols/skype/t/msg-skyped.mock +++ /dev/null @@ -1,49 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123, bob ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> GET USER bob ONLINESTATUS -<< USER bob ONLINESTATUS ONLINE ->> GET USER bob FULLNAME -<< USER bob FULLNAME Bob ->> MESSAGE bob foo -<< CHATMESSAGE 290 STATUS SENDING -<< CHAT #alice/$bob;ea753190f0a3e49b NAME #alice/$bob;ea753190f0a3e49b -<< CHAT #alice/$bob;ea753190f0a3e49b STATUS DIALOG -<< CHATMEMBER 287 ROLE USER -<< CHAT #alice/$bob;ea753190f0a3e49b MYROLE USER -<< CHAT #alice/$bob;ea753190f0a3e49b MEMBERS alice bob -<< CHAT #alice/$bob;ea753190f0a3e49b ACTIVEMEMBERS alice -<< CHAT #alice/$bob;ea753190f0a3e49b STATUS DIALOG -<< CHAT #alice/$bob;ea753190f0a3e49b TIMESTAMP 1357987847 -<< CHAT #alice/$bob;ea753190f0a3e49b DIALOG_PARTNER bob -<< CHAT #alice/$bob;ea753190f0a3e49b MEMBERS alice bob -<< CHAT #alice/$bob;ea753190f0a3e49b FRIENDLYNAME bob | foo -<< CHAT #alice/$bob;ea753190f0a3e49b POSTERS alice -<< CHAT #alice/$bob;ea753190f0a3e49b ACTIVITY_TIMESTAMP 1357987847 -<< CHAT #alice/$bob;ea753190f0a3e49b FRIENDLYNAME bob | foo -<< CHATMESSAGE 289 STATUS SENDING -<< CHATMESSAGE 290 STATUS SENDING -<< CHATMESSAGE 289 STATUS SENT -<< CHATMESSAGE 290 STATUS SENT -<< CHATMEMBER 288 IS_ACTIVE TRUE -<< CHAT #alice/$bob;ea753190f0a3e49b ACTIVEMEMBERS alice bob -<< CHAT #alice/$bob;ea753190f0a3e49b POSTERS alice bob -<< CHAT #alice/$bob;ea753190f0a3e49b ACTIVITY_TIMESTAMP 1357987875 -<< CHATMESSAGE 293 STATUS RECEIVED ->> GET CHATMESSAGE 293 FROM_HANDLE -<< CHATMESSAGE 293 FROM_HANDLE bob ->> GET CHATMESSAGE 293 BODY -<< CHATMESSAGE 293 BODY bar ->> GET CHATMESSAGE 293 TYPE -<< CHATMESSAGE 293 TYPE SAID ->> GET CHATMESSAGE 293 CHATNAME -<< CHATMESSAGE 293 CHATNAME #alice/$bob;ea753190f0a3e49b diff --git a/protocols/skype/t/set-mood-text-bitlbee.mock b/protocols/skype/t/set-mood-text-bitlbee.mock deleted file mode 100644 index bd78f74b..00000000 --- a/protocols/skype/t/set-mood-text-bitlbee.mock +++ /dev/null @@ -1,9 +0,0 @@ ->> NOTICE * -<< NICK alice -<< USER alice alice localhost :Alice ->> PRIVMSG &bitlbee -<< PRIVMSG &bitlbee :account add skype alice foo -<< PRIVMSG &bitlbee :account skype set skypeconsole_receive true -<< PRIVMSG &bitlbee :account skype on -<< PRIVMSG &bitlbee :account skype set mood_text "foo bar" ->> PRIVMSG &bitlbee :alice: PROFILE MOOD_TEXT foo bar diff --git a/protocols/skype/t/set-mood-text-skyped.mock b/protocols/skype/t/set-mood-text-skyped.mock deleted file mode 100644 index 566f4234..00000000 --- a/protocols/skype/t/set-mood-text-skyped.mock +++ /dev/null @@ -1,14 +0,0 @@ ->> SEARCH GROUPS CUSTOM -<< GROUPS 48, 49 ->> SEARCH FRIENDS -<< USERS echo123 ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> SET USERSTATUS ONLINE -<< USERSTATUS ONLINE ->> GET USER echo123 ONLINESTATUS -<< USER echo123 ONLINESTATUS ONLINE ->> GET USER echo123 FULLNAME -<< USER echo123 FULLNAME Echo / Sound Test Service ->> SET PROFILE MOOD_TEXT foo bar -<< PROFILE MOOD_TEXT foo bar diff --git a/protocols/skype/test.py b/protocols/skype/test.py deleted file mode 100755 index 233c41c8..00000000 --- a/protocols/skype/test.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python2.7 - -import subprocess -import sys -import pexpect -import unittest -import shutil -import os -import hashlib - -def openssl(args): - with open(os.devnull, "w") as devnull: - proc = subprocess.Popen(['openssl'] + args, stdin=subprocess.PIPE, stderr=devnull) - for i in range(6): - proc.stdin.write("\n") - proc.stdin.close() - proc.communicate() -def setupSkyped(): - try: - shutil.rmtree("t/skyped") - except OSError: - pass - os.makedirs("t/skyped") - cwd = os.getcwd() - os.chdir("t/skyped") - try: - shutil.copyfile("../../skyped.cnf", "skyped.cnf") - openssl(['req', '-new', '-x509', '-days', '365', '-nodes', '-config', 'skyped.cnf', '-out', 'skyped.cert.pem', '-keyout', 'skyped.key.pem']) - with open("skyped.conf", "w") as sock: - sock.write("[skyped]\n") - sock.write("username = alice\n") - sock.write("password = %s\n" % hashlib.sha1("foo").hexdigest()) - sock.write("cert = %s/skyped.cert.pem\n" % os.getcwd()) - sock.write("key = %s/skyped.key.pem\n" % os.getcwd()) - sock.write("port = 2727\n") - finally: - os.chdir(cwd) - -class Test(unittest.TestCase): - def mock(self, name): - with open("t/skyped.log", "w") as skyped_log,\ - open("t/pexpect.log", "w") as pexpect_log: - skyped = subprocess.Popen([sys.executable, "skyped.py", - "-c", "t/skyped/skyped.conf", "-n", "-d", "-m", "t/%s-skyped.mock" % name], - stdout=skyped_log, stderr=subprocess.STDOUT) - try: - bitlbee = pexpect.spawn('../../bitlbee', ['-d', 't/bitlbee'], logfile=pexpect_log) - if os.environ.get('ATTACH_GDB'): - subprocess.Popen(['gdb', '-batch-silent', - '-ex', 'set logging overwrite on', - '-ex', 'set logging file t/gdb-%s.log' % bitlbee.pid, - '-ex', 'set logging on', - '-ex', 'handle all pass nostop noprint', - '-ex', 'handle SIGSEGV pass stop print', - '-ex', 'set pagination 0', - '-ex', 'continue', - '-ex', 'backtrace full', - '-ex', 'info registers', - '-ex', 'thread apply all backtrace', - '-ex', 'quit', - '../../bitlbee', str(bitlbee.pid) ]) - bitlbee_mock = open("t/%s-bitlbee.mock" % name) - for i in bitlbee_mock.readlines(): - line = i.strip() - if line.startswith(">> "): - bitlbee.expect_exact(line[3:], timeout=10) - elif line.startswith("<< "): - bitlbee.sendline(line[3:]) - bitlbee_mock.close() - bitlbee.close() - finally: - skyped.terminate() - skyped.communicate() - - def setUp(self): - try: - shutil.rmtree("t/bitlbee") - except OSError: - pass - os.makedirs("t/bitlbee") - - def testMsg(self): - self.mock("msg") - - def testLogin(self): - self.mock("login") - - def testInfo(self): - self.mock("info") - - def testCall(self): - self.mock("call") - - def testCallFailed(self): - self.mock("call-failed") - - def testAddYes(self): - self.mock("add-yes") - - def testAddedYes(self): - self.mock("added-yes") - - def testAddedNo(self): - self.mock("added-no") - - def testGroupchatInvited(self): - self.mock("groupchat-invited") - - def testGroupchatInvite(self): - self.mock("groupchat-invite") - - def testGroupchatLeave(self): - self.mock("groupchat-leave") - - def testGroupchatMsg(self): - self.mock("groupchat-msg") - - def testGroupchatTopic(self): - self.mock("groupchat-topic") - - def testCalledYes(self): - self.mock("called-yes") - - def testCalledNo(self): - self.mock("called-no") - - def testFiletransfer(self): - self.mock("filetransfer") - - def testGroupRead(self): - self.mock("group-read") - - def testGroupAdd(self): - self.mock("group-add") - - def testCtcpHelp(self): - self.mock("ctcp-help") - - def testSetMoodText(self): - self.mock("set-mood-text") - - def testAwaySet(self): - self.mock("away-set") - -if __name__ == '__main__': - setupSkyped() - unittest.main() |