void SendInvite(struct fetion_account_data *sip,const gchar *who) { gchar *body,*hdr,*fullto; const gchar *my_ip; gint my_port; struct fetion_buddy * buddy = NULL; if(strncmp("sip:", who, 4)==0) fullto = g_strdup_printf("T: %s\r\n", who); else return; buddy = g_hash_table_lookup(sip->buddies,who); g_return_if_fail(buddy!=NULL); my_ip = purple_network_get_my_ip(sip->fd); my_port = purple_network_get_port_from_fd(sip->fd); purple_debug_info("fetion:","SendInvite:[%s:%d]\n",my_ip,my_port); hdr = g_strdup_printf("K: text/html-fragment\r\n" "K: multiparty\r\n" "K: nudge\r\n"); body = g_strdup_printf("v=0\r\n" "o=-0 0 IN %s:%d\r\n" "s=session\r\n" "c=IN IP4 %s:%d\r\n" "t=0 0\r\n" "m=message %d sip %s\r\n", my_ip,my_port,my_ip,my_port,my_port,sip->uri); purple_debug_info("fetion:","SendInvite:[%s]\n",body); send_sip_request(sip->gc,"I","",fullto,hdr,body,buddy->dialog,(TransCallback) SendInvite_cb); g_free(fullto); g_free(hdr); g_free(body); }
void process_incoming_invite(struct fetion_account_data *sip,struct sipmsg *msg) { const gchar * to,*callid; gchar * body; const gchar *my_ip; gint my_port; struct group_chat *g_chat; struct fetion_buddy * buddy =NULL; my_ip = purple_network_get_my_ip(sip->fd); my_port = purple_network_get_port_from_fd(sip->fd); purple_debug_info("fetion:","Invite:[%s:%d]\n",my_ip,my_port); body = g_strdup_printf("v=0\r\n" "o=-0 0 IN %s:%d\r\n" "s=session\r\n" "c=IN IP4 %s:%d\r\n" "t=0 0\r\n" "m=message %d sip %s\r\n", my_ip,my_port,my_ip,my_port,my_port,sip->uri); purple_debug_info("fetion:","Invite:answer[%s]\n",body); send_sip_response(sip->gc,msg,200,"OK",body); callid = sipmsg_find_header(msg,"I"); to = sipmsg_find_header(msg,"F"); if(strncmp(to,"sip:TG",6)!=0) { buddy = g_hash_table_lookup(sip->buddies,to); if(buddy==NULL) { buddy = g_new0(struct fetion_buddy, 1); buddy->name = g_strdup(to); g_hash_table_insert(sip->buddies, buddy->name, buddy); }
static void no_upnp() { char msg[100]; snprintf(msg,100,"You must manually open the port %d on the router, if any",atoi(purple_value_get_string(port))); purple_notify_warning(the_plugin,"No upnp available","Port mapping",msg); const char* ip=purple_network_get_my_ip(-1); purple_debug_misc(PLUGIN_ID,"purple_network_get_my_ip(-1)=\"%s\"\n",ip); purple_value_set_string(server_ip,ip); start_direct_connection(); }
static void irc_dccsend_network_listen_cb(int sock, gpointer data) { PurpleXfer *xfer = data; struct irc_xfer_send_data *xd; PurpleConnection *gc; struct irc_conn *irc; const char *arg[2]; char *tmp; struct in_addr addr; unsigned short int port; xd = purple_xfer_get_protocol_data(xfer); xd->listen_data = NULL; if (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_LOCAL || purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_REMOTE) { g_object_unref(xfer); return; } xd = purple_xfer_get_protocol_data(xfer); gc = purple_account_get_connection(purple_xfer_get_account(xfer)); irc = purple_connection_get_protocol_data(gc); g_object_unref(xfer); if (sock < 0) { purple_notify_error(gc, NULL, _("File Transfer Failed"), _("Unable to open a listening port."), purple_request_cpar_from_connection(gc)); purple_xfer_cancel_local(xfer); return; } xd->fd = sock; port = purple_network_get_port_from_fd(sock); purple_debug_misc("irc", "port is %hu\n", port); /* Monitor the listening socket */ purple_xfer_set_watcher(xfer, purple_input_add(sock, PURPLE_INPUT_READ, irc_dccsend_send_connected, xfer)); /* Send the intended recipient the DCC request */ arg[0] = purple_xfer_get_remote_user(xfer); inet_aton(purple_network_get_my_ip(irc->fd), &addr); arg[1] = tmp = g_strdup_printf("\001DCC SEND \"%s\" %u %hu %" G_GOFFSET_FORMAT "\001", purple_xfer_get_filename(xfer), ntohl(addr.s_addr), port, purple_xfer_get_size(xfer)); irc_cmd_privmsg(purple_connection_get_protocol_data(gc), "msg", NULL, arg); g_free(tmp); }
static gboolean set_status_all() { trace("status setting.."); char *ip = purple_network_get_my_ip(-1); if (strcmp(str_myip, ip) != 0) { strcpy(str_myip, ip); myip = ip_atoi(ip); /* find the longest prefix rule */ guint32 i=0; guint32 max_len = 0; guint32 fit = 0; gboolean found = FALSE; for (i=0; i<rule_cnt; i++){ if (!found && rules[i].netmask == 0 ) { fit = i; found = TRUE; continue; } if ((rules[i].netmask > max_len) && \ (((myip ^ rules[i].ip) & (~0 << (32-rules[i].netmask))) == 0)) { max_len = rules[i].netmask; fit = i; found = TRUE; } } if (found) { loc = rules[fit].status; trace("Found fit rules, %s", loc); } else loc = ""; } GList *acnt = NULL, *head = NULL; head = acnt = purple_accounts_get_all_active(); while (acnt != NULL) { if ((PurpleAccount *)acnt->data != NULL) { set_status (acnt->data, loc); } acnt = acnt->next; } if (head != NULL) g_list_free(head); trace("status set for all accounts"); return TRUE; }
void msn_dc_listen_socket_created_cb(int listenfd, gpointer data) { MsnDirectConn *dc = data; if (purple_debug_is_verbose()) purple_debug_info("msn", "msn_dc_listen_socket_created_cb %p\n", dc); g_return_if_fail(dc != NULL); dc->listen_data = NULL; if (listenfd != -1) { const char *ext_ip; const char *int_ip; int port; ext_ip = purple_network_get_my_ip(listenfd); int_ip = purple_network_get_local_system_ip(listenfd); port = purple_network_get_port_from_fd(listenfd); dc->listenfd = listenfd; dc->listenfd_handle = purple_input_add( listenfd, PURPLE_INPUT_READ, msn_dc_incoming_connection_cb, dc ); dc->connect_timeout_handle = purple_timeout_add_seconds( DC_INCOMING_TIMEOUT, msn_dc_incoming_connection_timeout_cb, dc ); if (strcmp(int_ip, ext_ip) != 0) { dc->msg_body = g_strdup_printf( "Bridge: TCPv1\r\n" "Listening: true\r\n" "%sNonce: {%s}\r\n" "IPv4External-Addrs: %s\r\n" "IPv4External-Port: %d\r\n" "IPv4Internal-Addrs: %s\r\n" "IPv4Internal-Port: %d\r\n" "\r\n", dc->nonce_type != DC_NONCE_PLAIN ? "Hashed-" : "", dc->nonce_hash, ext_ip, port, int_ip, port ); } else { dc->msg_body = g_strdup_printf( "Bridge: TCPv1\r\n" "Listening: true\r\n" "%sNonce: {%s}\r\n" "IPv4External-Addrs: %s\r\n" "IPv4External-Port: %d\r\n" "\r\n", dc->nonce_type != DC_NONCE_PLAIN ? "Hashed-" : "", dc->nonce_hash, ext_ip, port ); } if (dc->slpcall->wait_for_socket) { if (dc->send_connection_info_msg_cb != NULL) dc->send_connection_info_msg_cb(dc); dc->slpcall->wait_for_socket = FALSE; } } }
/** * We've just opened a listener socket, so we send the remote * user an ICBM and ask them to connect to us. */ static void peer_connection_establish_listener_cb(int listenerfd, gpointer data) { PeerConnection *conn; OscarData *od; PurpleConnection *gc; PurpleAccount *account; PurpleConversation *conv; char *tmp; FlapConnection *bos_conn; const char *listener_ip; const guchar *ip_atoi; unsigned short listener_port; conn = data; conn->listen_data = NULL; if (listenerfd < 0) { /* Could not open listener socket */ peer_connection_trynext(conn); return; } od = conn->od; gc = od->gc; account = purple_connection_get_account(gc); conn->listenerfd = listenerfd; /* Watch for new connections on our listener socket */ conn->watcher_incoming = purple_input_add(conn->listenerfd, PURPLE_INPUT_READ, peer_connection_listen_cb, conn); /* Send the "please connect to me!" ICBM */ bos_conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM); if (bos_conn == NULL) { /* Not good */ peer_connection_trynext(conn); return; } if (bos_conn->gsc) listener_ip = purple_network_get_my_ip(bos_conn->gsc->fd); else listener_ip = purple_network_get_my_ip(bos_conn->fd); ip_atoi = purple_network_ip_atoi(listener_ip); if (ip_atoi == NULL) { /* Could not convert IP to 4 byte array--weird, but this does happen for some users (#4829, Adium #15839). Maybe they're connecting with IPv6...? Maybe through a proxy? */ purple_debug_error("oscar", "Can't ask peer to connect to us " "because purple_network_ip_atoi(%s) returned NULL. " "fd=%d. is_ssl=%d\n", listener_ip ? listener_ip : "(null)", bos_conn->gsc ? bos_conn->gsc->fd : bos_conn->fd, bos_conn->gsc ? 1 : 0); peer_connection_trynext(conn); return; } listener_port = purple_network_get_port_from_fd(conn->listenerfd); if (conn->type == OSCAR_CAPABILITY_DIRECTIM) { aim_im_sendch2_odc_requestdirect(od, conn->cookie, conn->bn, ip_atoi, listener_port, ++conn->lastrequestnumber); /* Print a message to a local conversation window */ conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->bn); tmp = g_strdup_printf(_("Asking %s to connect to us at %s:%hu for " "Direct IM."), conn->bn, listener_ip, listener_port); purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); g_free(tmp); } else if (conn->type == OSCAR_CAPABILITY_SENDFILE) { aim_im_sendch2_sendfile_requestdirect(od, conn->cookie, conn->bn, ip_atoi, listener_port, ++conn->lastrequestnumber, (const gchar *)conn->xferdata.name, conn->xferdata.size, conn->xferdata.totfiles); } }
/** * We've just opened a listener socket, so we send the remote * user an ICBM and ask them to connect to us. */ static void peer_connection_establish_listener_cb(int listenerfd, gpointer data) { PeerConnection *conn; OscarData *od; PurpleConnection *gc; PurpleAccount *account; PurpleConversation *conv; char *tmp; FlapConnection *bos_conn; const char *listener_ip; unsigned short listener_port; conn = data; conn->listen_data = NULL; if (listenerfd < 0) { /* Could not open listener socket */ peer_connection_trynext(conn); return; } od = conn->od; gc = od->gc; account = purple_connection_get_account(gc); conn->listenerfd = listenerfd; /* Watch for new connections on our listener socket */ conn->watcher_incoming = purple_input_add(conn->listenerfd, PURPLE_INPUT_READ, peer_connection_listen_cb, conn); /* Send the "please connect to me!" ICBM */ bos_conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM); if (bos_conn == NULL) { /* Not good */ peer_connection_trynext(conn); return; } if (bos_conn->gsc) listener_ip = purple_network_get_my_ip(bos_conn->gsc->fd); else listener_ip = purple_network_get_my_ip(bos_conn->fd); listener_port = purple_network_get_port_from_fd(conn->listenerfd); if (conn->type == OSCAR_CAPABILITY_DIRECTIM) { aim_im_sendch2_odc_requestdirect(od, conn->cookie, conn->sn, purple_network_ip_atoi(listener_ip), listener_port, ++conn->lastrequestnumber); /* Print a message to a local conversation window */ conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->sn); tmp = g_strdup_printf(_("Asking %s to connect to us at %s:%hu for " "Direct IM."), conn->sn, listener_ip, listener_port); purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); g_free(tmp); } else if (conn->type == OSCAR_CAPABILITY_SENDFILE) { aim_im_sendch2_sendfile_requestdirect(od, conn->cookie, conn->sn, purple_network_ip_atoi(listener_ip), listener_port, ++conn->lastrequestnumber, (const gchar *)conn->xferdata.name, conn->xferdata.size, conn->xferdata.totfiles); } }
STATIC_PROTO_INIT gboolean purple_core_init(const char *ui) { PurpleCoreUiOps *ops; PurpleCore *core; g_return_val_if_fail(ui != NULL, FALSE); g_return_val_if_fail(purple_get_core() == NULL, FALSE); #ifdef ENABLE_NLS bindtextdomain(PACKAGE, LOCALEDIR); #endif //VOXOX - JRT - 2009.04.11 #ifdef _WIN32 wpurple_init(); #ifdef _DEBUG // _CrtSetDbgFlag( 0x20 ); //_CRTDBG_LEAK_CHECK_DF );//VOXOX - JRT - 2009.04.10 JRT-XXX // _CrtSetAllocHook( AllocHook ); #endif #endif g_type_init(); _core = core = g_new0(PurpleCore, 1); core->ui = g_strdup(ui); core->reserved = NULL; ops = purple_core_get_ui_ops(); /* The signals subsystem is important and should be first. */ purple_signals_init(); purple_util_init(); purple_signal_register(core, "uri-handler", purple_marshal_BOOLEAN__POINTER_POINTER_POINTER, purple_value_new(PURPLE_TYPE_BOOLEAN), 3, purple_value_new(PURPLE_TYPE_STRING), /* Protocol */ purple_value_new(PURPLE_TYPE_STRING), /* Command */ purple_value_new(PURPLE_TYPE_BOXED, "GHashTable *")); /* Parameters */ purple_signal_register(core, "quitting", purple_marshal_VOID, NULL, 0); /* The prefs subsystem needs to be initialized before static protocols * for protocol prefs to work. */ purple_prefs_init(); purple_debug_init(); if (ops != NULL) { if (ops->ui_prefs_init != NULL) ops->ui_prefs_init(); if (ops->debug_ui_init != NULL) ops->debug_ui_init(); } #ifdef HAVE_DBUS purple_dbus_init(); #endif purple_ciphers_init(); purple_cmds_init(); /* Since plugins get probed so early we should probably initialize their * subsystem right away too. */ purple_plugins_init(); /* Initialize all static protocols. */ static_proto_init(); purple_plugins_probe(G_MODULE_SUFFIX); /* The buddy icon code uses the imgstore, so init it early. */ purple_imgstore_init(); /* Accounts use status, buddy icons and connection signals, so * initialize these before accounts */ purple_status_init(); purple_buddy_icons_init(); purple_connections_init(); purple_accounts_init(); purple_savedstatuses_init(); purple_notify_init(); purple_certificate_init(); purple_conversations_init(); purple_blist_init(); purple_log_init(); purple_network_init(); purple_privacy_init(); purple_pounces_init(); purple_proxy_init(); purple_dnsquery_init(); purple_sound_init(); purple_ssl_init(); purple_stun_init(); purple_xfers_init(); purple_idle_init(); purple_smileys_init(); /* * Call this early on to try to auto-detect our IP address and * hopefully save some time later. */ purple_network_get_my_ip(-1); if (ops != NULL && ops->ui_init != NULL) ops->ui_init(); return TRUE; }