亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? simple.c

?? 這是國外的resip協(xié)議棧
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
#include <assert.h>#include <string.h>#include <errno.h>#include <glib.h>#include "internal.h"#include "account.h"#include "accountopt.h"#include "debug.h"#include "multi.h"#include "notify.h"#include "prpl.h"#include "request.h"#include "server.h"#include "util.h"#ifdef NO_FORK#include <shlwapi.h>#endif#include "simple.h"static GaimPlugin *my_protocol = NULL;typedef enum{      /* GAIM <-> GAG */      SIMPLE_IM                 = 0x00,      SIMPLE_PRESENCE           = 0x01,      SIMPLE_HELLO              = 0x02,        /* GAIM --> GAG */      SIMPLE_LOGIN              = 0x40,      SIMPLE_LOGOUT             = 0x41,      SIMPLE_ADD_BUDDY          = 0x42,      SIMPLE_REMOVE_BUDDY       = 0x43,      SIMPLE_SHUTDOWN           = 0x44,      /* GAG --> GAIM */      SIMPLE_ERROR              = 0x80,      SIMPLE_LOGIN_STATUS       = 0x81} gag_command_t;/*   In the parent   Read from gag using FD_GAG_TO_GAIM   Write to gag using FD_GAIM_TO_GAG*/#ifdef NO_FORKstatic int gagfd = 0;#define FD_GAG_TO_GAIM gagfd#define FD_GAIM_TO_GAG gagfd#elsestatic int gaimtogag[2];static int gagtogaim[2];#define FD_GAG_TO_GAIM gagtogaim[0]#define FD_GAIM_TO_GAG gaimtogag[1]#endifstatic int gaginitialized = 0;static intisAccountNameUnsafe(char *accountName){   /* There's an open-ended minefield to be explored here.    * This is just a first attempt to keep gaim and gag    * from blowing apart because some user typed in    * "bad stuff (tm)".    */   if (g_strrstr(accountName,"<")!=NULL) {return 1;}   if (g_strrstr(accountName,">")!=NULL) {return 1;}   if (g_strrstr(accountName," ")!=NULL) {return 1;}   if (g_strrstr(accountName,":")!=NULL)   {    if (        ! (    g_str_has_prefix(accountName,"sip:")            || g_str_has_prefix(accountName,"sips:")          )       ) return 1;   }   return 0; }char *buildSIPURI(char *accountName){  if (g_str_has_prefix(accountName,"sip:")) {return g_strdup(accountName);}  if (g_str_has_prefix(accountName,"sips:")) {return g_strdup(accountName);}  return g_strconcat("sip:",accountName,NULL);}static void sippy_get_string( char* buf, int bufSize ){    int len;   int length;      len = read(  FD_GAG_TO_GAIM, &length, sizeof(length) );   assert( len == sizeof(length) );      if ( length+1 >= bufSize )   {      assert(0);   }      if (length)   {     len = read( FD_GAG_TO_GAIM, buf, length );     assert( len == length );   }      buf[length]=0;}static void sippy_get_int( int* i ){    int len;   int length;      len = read(  FD_GAG_TO_GAIM, &length, sizeof(length) );   assert( len == sizeof(length) );      if ( length != sizeof(int) )   {      assert(0);   }      len = read( FD_GAG_TO_GAIM, i, length );   assert( len == length );}static void sippy_get_bool( unsigned char* i ){    int len;   int length;      len = read(  FD_GAG_TO_GAIM, &length, sizeof(length) );   assert( len == sizeof(length) );      if ( length != sizeof(char) )   {      assert(0);   }      len = read( FD_GAG_TO_GAIM, i, length );   assert( len == length );}static void sippy_send_bool( const unsigned char b ){     int len;   int l;   assert( FD_GAIM_TO_GAG );      len=sizeof(b);   l=write( FD_GAIM_TO_GAG, &len, sizeof(len) );   assert( l == sizeof(len) );   l=write( FD_GAIM_TO_GAG, &b, len );   assert( l == len );}static void sippy_send_string( const char* buf ){     int len;   int l;   assert( FD_GAIM_TO_GAG );      /*RjS - Gaim gives us NULLs instead of empty strings sometimes   */         len=(buf==NULL?0:strlen(buf));   l=write( FD_GAIM_TO_GAG, &len, sizeof(len) );   assert( l == sizeof(len) );   if (len>0)   {     l=write( FD_GAIM_TO_GAG, buf, len );     assert( l == len );   }}static void sippy_send_command( const gag_command_t command ){     int l;   assert( FD_GAIM_TO_GAG );   l=write( FD_GAIM_TO_GAG, &command, sizeof(command) );   assert( l == sizeof(command) );}static const char *sippy_list_icon(GaimAccount *a, GaimBuddy *b){	return "sippy";}static voidsippy_recv_cb(gpointer data, gint source, GaimInputCondition condition){  GaimConnection *gc = data;  int len;  int command;  static char buf[4096];  static char bufFrom[4096];  static char bufTo[4096];    len = read( FD_GAG_TO_GAIM, &command, sizeof(command ) );  if ( len == -1 )  {     int err = errno;     gaim_debug(GAIM_DEBUG_INFO,"sippy","err=%d\n",err);       /* something really bad happened */     assert(0);  }  if ( len == 0 )  {     /* not ready */     return;  }  assert( len == sizeof(command) );    switch ( command )  {     case SIMPLE_IM:     {	        gaim_debug(GAIM_DEBUG_INFO,"sippy","got an IM messages from gag\n");          sippy_get_string( bufTo, sizeof(bufTo) );        sippy_get_string( bufFrom, sizeof(bufFrom) );        sippy_get_string( buf, sizeof(buf) );        gaim_debug(GAIM_DEBUG_INFO,"sippy","got an IM from=%s to=%s data=%s\n",bufFrom,bufTo,buf);          serv_got_im(gc,bufFrom,buf,0,time(NULL));      }     break;          case SIMPLE_LOGIN_STATUS:     {        unsigned char success;        int sipCode;                /* bool success, int sipCode, data message */        sippy_get_bool( &success );        sippy_get_int( &sipCode );        sippy_get_string( buf, sizeof(buf) );           gaim_debug(GAIM_DEBUG_INFO,"sippy","got a LOGIN_STATUS status=%d msg=%s\n",sipCode,buf);	if (gaim_connection_get_state(gc) != GAIM_CONNECTED)	{          if (success)          {            gaim_connection_update_progress(gc,_("Connecting"),1,2);            gaim_connection_set_state(gc, GAIM_CONNECTED);          }          else          {            gaim_connection_error(gc, _(buf));          }	}     }     break;          case SIMPLE_PRESENCE: /* uri aor, bool  available, Data status */     {         unsigned char open;	int lastReportedUCStatus;                gaim_debug(GAIM_DEBUG_INFO,"sippy","got a PRES messages from gag\n");        sippy_get_string( bufFrom, sizeof(bufFrom) );        sippy_get_bool( &open );        sippy_get_string( buf, sizeof(buf) );                gaim_debug(GAIM_DEBUG_INFO,"sippy","got a PRES messages from gag from=%s open=%d, msg=%s\n",bufFrom,open,buf);        {	  struct simple_connection_cache *sc_cache = gc->proto_data;	  struct simple_friend_cache *sf;	  	  sf = g_hash_table_lookup(sc_cache->friends,bufFrom);	  if (!sf) {	    sf = simple_friend_cache_new();	    g_hash_table_insert(sc_cache->friends,g_strdup(bufFrom),sf);	  }          if (sf->status_string)	  {	    g_free(sf->status_string);	  } 	  sf->status_string = g_strdup(buf);	  lastReportedUCStatus = (sf->status_int ^= 2);	} 	/* AFAICT, there is a half-done change to the use of	 * the last argument to serv_got_update that is messing	 * up Yahoo as well as us. The code above the prpl abstraction	 * claims the integer is ours to do with as we please, but they	 * use the lowest order bit to mean available or not.	 *	 * Other code looks for changes to this integer - if it has	 * not changed it shortcuts all the GUI updates. So...	 * We're going to game gaim for now by toggling the second	 * lowest order bit each time we call this function.         *         * TODO: This was true in the gaim 0.71 code - need to review to         * see if this is still appropriate.	 */        serv_got_update(gc, bufFrom, (int)open, 0, 0, 0, lastReportedUCStatus);     }     break;          case SIMPLE_HELLO: /* bool ok */     {        unsigned char ok;        sippy_get_bool( &ok );         gaim_debug(GAIM_DEBUG_INFO,"sippy","got a HELLO ok=%d\n",ok);     }          case SIMPLE_ERROR:     {         gaim_debug(GAIM_DEBUG_INFO,"sippy","got an ERROR messages from gag\n");        sippy_get_string( buf, sizeof(buf) );        gaim_debug(GAIM_DEBUG_INFO,"sippy","gag ERROR %s\n",buf);        gaim_request_action(gc, _("SIP Error"), _("SIP Error"), buf,                              0, NULL, 1, _("Okay"), 0);     }     break;          default:        assert(0);  }}static voidsippy_add_buddy(GaimConnection *gc, GaimBuddy *who, GaimGroup *dontCare){   if (!gaginitialized) {return;}   gaim_debug(GAIM_DEBUG_INFO,"sippy","sending ADD BUDDY to gag us=%s them=%s\n",gc->account->username,who->name);   sippy_send_command( SIMPLE_ADD_BUDDY );   sippy_send_string( gc->account->username );   sippy_send_string( who->name );}static voidsippy_logout(GaimConnection *gc){   if (!gaginitialized) {return;}   gaim_debug(GAIM_DEBUG_INFO,"sippy","sending LOGOUT to gag aor=%s\n",gc->account->username);   sippy_send_command( SIMPLE_LOGOUT );   sippy_send_string( gc->account->username );   gaim_debug(GAIM_DEBUG_INFO,"sippy","Removing gag's gaim_input\n");   gaim_input_remove(gc->inpa);}static voidsippy_remove_buddy(GaimConnection *gc, GaimBuddy *who, GaimGroup *group){   if (!gaginitialized) {return;}   gaim_debug(GAIM_DEBUG_INFO,"sippy","sending REMOVE BUDDY to gag us=%s them=%s\n",gc->account->username,who->name);   sippy_send_command( SIMPLE_REMOVE_BUDDY );   sippy_send_string( gc->account->username );   sippy_send_string( who->name );}static gboolean sippy_unload_plugin(GaimPlugin *plugin){    if (gaginitialized)   {     gaim_debug(GAIM_DEBUG_INFO,"sippy","sending SHUTDOWN to gag\n");     sippy_send_command( SIMPLE_SHUTDOWN );   }   return 1;}static voidinit_gag(GaimConnection *gc){  char sanity_check_buffer[8];  int sane;#ifdef NO_FORK  char gag_path[256];  DWORD gag_path_size = 240;#endif  gaim_debug(GAIM_DEBUG_INFO,"sippy","Initializing Gag\n");  #ifdef NO_FORK  {    int listenfd;    int status;    int shell_exec_status;    struct sockaddr_in us;    struct sockaddr_in them;    size_t addr_len = sizeof(them);    char buffer[1024];    memset((void *)&us, 0, sizeof(struct sockaddr_in));    memset((void *)&them, 0, sizeof(struct sockaddr_in));    us.sin_family = AF_INET;    us.sin_port = 0xBEEF;    inet_aton("127.0.0.1", &(us.sin_addr));    listenfd = socket(PF_INET, SOCK_STREAM, 0);    if (listenfd < 0)    {      /* We're single threaded, so strerror is safe */      snprintf(buffer, sizeof(buffer),                "Unable to start the SIP engine - "               "Could not create loopback socket; err = %d (%s)",               errno, strerror(errno));      gaim_connection_error(gc, buffer);      return;    }    status = bind (listenfd, (struct sockaddr*)&us, sizeof(struct sockaddr));    if (status != 0)    {      /* We're single threaded, so strerror is safe */      snprintf(buffer, sizeof(buffer),                "Unable to start the SIP engine - "               "Could not bind to loopback socket; err = %d (%s)",               errno, strerror(errno));      gaim_connection_error(gc, buffer);      return;    }     status = listen(listenfd, 1);    if (status != 0)    {      /* We're single threaded, so strerror is safe */      snprintf(buffer, sizeof(buffer),                "Unable to start the SIP engine - "               "Could not listen on loopback socket; err = %d (%s)",               errno, strerror(errno));      gaim_connection_error(gc, buffer);      return;    }    /* Start SIP engine */    /* First, check in the directory into which Gaim is installed */    SHRegGetUSValue ("SOFTWARE\\gaim", NULL, NULL,                      (LPVOID)gag_path,                      &gag_path_size,                      TRUE,                     NULL, 0);    strcat(gag_path, "\\gag.exe");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕视频一区| 亚洲综合一区在线| 在线观看免费成人| 国产一区不卡精品| 亚洲与欧洲av电影| 久久久国产一区二区三区四区小说 | 国产精品一卡二卡在线观看| 亚洲最新在线观看| 亚洲国产精品ⅴa在线观看| 欧美一区二区三区喷汁尤物| 91丝袜美女网| 国产69精品一区二区亚洲孕妇| 日产精品久久久久久久性色| 亚洲免费av观看| 久久精品人人做人人综合| 欧美一区二区免费视频| 色欧美88888久久久久久影院| 国产一区不卡精品| 久久国产视频网| 性做久久久久久免费观看| 亚洲女同一区二区| 久久精品国产精品青草| 亚洲一区二区在线免费看| 国产精品第四页| 国产无遮挡一区二区三区毛片日本| 欧美一区二区久久| 精品视频全国免费看| 99免费精品视频| 成人国产精品免费观看动漫| 国产精品香蕉一区二区三区| 奇米亚洲午夜久久精品| 日韩一区精品视频| 日韩高清一区在线| 日韩成人精品在线观看| 亚洲成a人v欧美综合天堂下载| 一区二区三区 在线观看视频| 综合久久久久久| 日韩理论在线观看| 亚洲四区在线观看| 亚洲免费三区一区二区| 亚洲精品欧美激情| 一区二区国产视频| 亚洲高清不卡在线| 婷婷久久综合九色国产成人| 无吗不卡中文字幕| 日韩电影免费在线看| 美女精品自拍一二三四| 精品制服美女丁香| 国产精品综合久久| 国产999精品久久| 91在线视频18| 欧美丝袜自拍制服另类| 亚洲另类春色国产| 亚洲国产精品一区二区久久| 亚洲高清久久久| 日本午夜精品一区二区三区电影| 首页综合国产亚洲丝袜| 久久精品国产澳门| 国产精品99久| 97aⅴ精品视频一二三区| 欧美曰成人黄网| 欧美日韩国产精品自在自线| 欧美一卡二卡三卡| 久久精品无码一区二区三区| 中文字幕日韩精品一区| 亚洲狠狠爱一区二区三区| 美女一区二区三区| 成人久久久精品乱码一区二区三区| av亚洲精华国产精华| 欧美日韩亚洲综合在线 | 国产精品每日更新| 亚洲人亚洲人成电影网站色| 午夜免费久久看| 国内精品久久久久影院一蜜桃| www.成人网.com| 欧美喷水一区二区| 国产亚洲1区2区3区| 亚洲激情男女视频| 久久99热这里只有精品| www.日韩在线| 欧美一区二区成人| 国产精品成人免费| 日本成人在线看| 成人爽a毛片一区二区免费| 欧美日韩亚洲综合在线| 久久精品99国产精品日本| 成人国产精品免费| 欧美精品一卡二卡| 国产精品丝袜一区| 日韩在线一区二区三区| www.欧美日韩| 精品欧美乱码久久久久久1区2区 | 国产日韩精品一区二区三区| 一区二区高清视频在线观看| 韩国女主播成人在线观看| 色综合久久99| 久久久亚洲欧洲日产国码αv| 亚洲黄色性网站| 国产高清不卡二三区| 欧美裸体一区二区三区| 国产精品久久久久9999吃药| 奇米一区二区三区| 欧美中文字幕一区二区三区 | 成人性视频网站| 欧美一卡二卡在线| 亚洲综合偷拍欧美一区色| 国产成人一级电影| 日韩精品中文字幕一区二区三区| 一区二区三区影院| 成人精品gif动图一区| 日韩精品资源二区在线| 午夜欧美电影在线观看| 一本久道中文字幕精品亚洲嫩| 久久久亚洲精品石原莉奈| 日韩av高清在线观看| 欧美午夜精品久久久久久超碰 | 蜜臀av性久久久久av蜜臀妖精| 在线观看av一区二区| 国产精品乱码一区二区三区软件| 欧美日韩视频一区二区| 亚洲视频一区在线观看| 国产不卡在线播放| 久久久久久影视| 久久99久久久久| 91.麻豆视频| 一区二区高清免费观看影视大全 | 欧美日韩国产影片| 一区二区三区国产精品| 91丝袜美腿高跟国产极品老师| 国产女人aaa级久久久级| 国产精品一二三四区| 26uuu另类欧美| 国产乱码精品一区二区三区忘忧草 | 欧美一级久久久| 亚洲视频一区在线| 99精品偷自拍| 亚洲天堂a在线| 91玉足脚交白嫩脚丫在线播放| 欧美激情一区二区三区四区| 精品一区二区综合| 精品日韩欧美一区二区| 久久国产视频网| 精品三级av在线| 久久99精品国产91久久来源| 欧美成人女星排行榜| 另类调教123区| 精品国产乱码久久久久久图片| 久国产精品韩国三级视频| 欧美成人免费网站| 国产精品77777竹菊影视小说| 欧美精品一区二区三| 国产伦精品一区二区三区视频青涩| 精品国产欧美一区二区| 国产精品99久久久久久宅男| 中文字幕欧美激情一区| 99热国产精品| 亚洲高清免费在线| 日韩一区二区免费电影| 精品一区二区在线免费观看| 久久久久久黄色| 国产在线不卡一区| 中文字幕欧美一区| 欧美日韩在线一区二区| 免费看日韩精品| 久久久久久久久久久久久久久99| av在线一区二区三区| 亚洲影院理伦片| 欧美一区二区在线视频| 国产精品综合一区二区| 亚洲女厕所小便bbb| 91麻豆精品国产91久久久| 国产一区中文字幕| 亚洲美女屁股眼交| 欧美一区二区三区四区在线观看| 国产在线精品免费av| 国产精品福利一区二区三区| 欧美日韩在线播| 国产乱码精品一区二区三区忘忧草 | 国产成人在线看| 中文乱码免费一区二区| 欧美色中文字幕| 国产精品一区二区三区99| 一区二区欧美国产| 久久这里只有精品6| 91精品福利视频| 国产一区二区在线视频| 一二三四社区欧美黄| 久久久久久久久蜜桃| 在线视频综合导航| 国产成人高清在线| 日韩国产精品久久| 亚洲三级免费观看| 久久久亚洲综合| 欧美日韩大陆一区二区| 波多野结衣一区二区三区| 免费成人美女在线观看.| 亚洲激情第一区| 欧美激情一区二区| 欧美成人一区二区三区在线观看| 91九色02白丝porn|