int jabber_connect (void) { int e; j_parser = iks_stream_new (IKS_NS_CLIENT, NULL, (iksStreamHook *) on_stream); j_user = iks_id_new (iks_parser_stack (j_parser), prefs.jid); if (j_user->resource == NULL) { char buf[512]; sprintf (buf, "%s/sozluk", j_user->partial); j_user = iks_id_new (iks_parser_stack (j_parser), buf); } log_event ("Bağlanmayı deniyorum (%s)", j_user->full); //iks_set_log_hook (j_parser, (iksLogHook *) on_log); authorized = 0; e = iks_connect_tcp (j_parser, j_user->server, IKS_JABBER_PORT); switch (e) { case IKS_OK: return 0; case IKS_NET_NODNS: case IKS_NET_NOCONN: default: log_event ("jabber bork"); return -1; } }
CFStouXmppGwConn* CFStouXmppGwNewConn(CFStouXmppGw* gw, CFStouSvrConn* stouConn) { CFStouXmppGwConn *gwConn; LCF_DBG_IN_FUNC(); gwConn = malloc(sizeof(CFStouXmppGwConn)); if (!gwConn) { LCF_ERR_OUT(ERR_OUT, "out of memory\n"); } memset(gwConn, 0, sizeof(CFStouXmppGwConn)); if (XCInit(&gwConn->xc, NULL, NULL, NULL, gw->xmppSvrIp, NULL, gw->xmppSvrPort, gw->evts, 256, _XCCb, gwConn)) { LCF_ERR_OUT(ERR_FREE_CONN, "XCInit() failed\n"); } LCF_DBG_N(); gwConn->gw = gw; gwConn->stouConn = stouConn; CFStouSvrConnSetUserData(stouConn, gwConn); LCF_DBG_N(); CFStouSvrConnSetOnData(gwConn->stouConn, _StouSvrConnOnData); CFStouSvrConnSetOnDisconnected(gwConn->stouConn, __StouSvrConnOnDisconnected); if (!(gwConn->sscParser = iks_stream_new("StouXmppStouSvrConnParser", gwConn, _StouSvrConnStreamHook))) { LCF_ERR_OUT(ERR_EXIT_XC, "\n"); } CFListInit(&gwConn->list); CFListAppend(&gw->conns, &gwConn->list); CFStouSvrConnMonitorReadable(gwConn->stouConn, TRUE); gwConn->stat = CF_STOU_XMPP_GW_CONN_ST_SCC_CONNECTED; return gwConn; ERR_FREE_SSC_PARSER: iks_parser_delete(gwConn->sscParser); ERR_EXIT_XC: XCExit(&gwConn->xc); ERR_FREE_CONN: free(gwConn); ERR_OUT: return NULL; }
iksparser* jabber_connect(const char* host_addr, int port, void *user_data, iksStreamHook callback) { int socket_fd; iksparser* parser; char* tmp; socket_fd = connect_socket(host_addr, port); if(socket_fd == -1) { return NULL; } parser = iks_stream_new("jabber:client", user_data, callback); iks_connect_fd(parser, socket_fd); asprintf(&tmp, JABBER_HEADER, host_addr); send(socket_fd, tmp, strlen(tmp), 0); free(tmp); return parser; }
int main(int argc, char *argv[]) { iksid *myjabberid = NULL; char *jabberid = NULL; char *resource = NULL; int state,args; int port = 0; if(argc > 2) { for (args=1; args < argc; args++) { if(!strncmp(argv[args], "-u", sizeof(argv[args]))) { jabberid = argv[args+1]; #ifdef DEBUG puts((char *) jabberid); #endif } else { if(!strncmp(argv[args], "-p", sizeof(argv[args]))) { port = atoi(argv[args+1]); if(port == 0) if(error("can't bind to this port")) return 1; #ifdef DEBUG printf("port: %i\n", port); #endif } if(!strncmp(argv[args],"-r",sizeof(argv[args]))){ resource = argv[args+1]; #ifdef DEBUG printf("resource: %s\n",resource); #endif } } } } /* * initialising the struct net of the type netdata */ struct netdata net; /* * create a new SAX parser */ net.parser = iks_sax_new(NULL, tagHook, cdataHook); /* * check if the parser is valid */ if(!net.parser) error("f**k off damn bastard."); /* * create a new stream on the parser */ net.parser = iks_stream_new(IKS_NS_CLIENT, &net, (iksStreamHook *) tagHook); #ifdef DEBUG if(net.parser) puts("net.parser initiated."); #endif /* * copy the new jabberid to the net struct */ net.id = create_id(jabberid, &net); /* * just a boring message.. ;-) */ printf("Connecting to '%s'...", net.id->server); /* * try to connect to the remote server */ if(port == 0) state = iks_connect_tcp(net.parser, net.id->server, IKS_JABBER_PORT); else state = iks_connect_tcp(net.parser, net.id->server, port); /* * check wether the connection is established or not. */ switch (state) { case IKS_OK: /* * everything is OK! ;-) */ puts("OK"); break; case IKS_NET_NODNS: /* * hostname could not be resolved */ if(error("hostname lookup failed") == 1) return 1; case IKS_NET_NOSOCK: /* * socket descriptor cannot be created */ if(error("socket cannot be created") == 1) return 1; case IKS_NET_NOCONN: /* * the connection cannot be established.. * this could have several sources. */ if(error("connection failed") == 1) return 1; default: /* * everything else. */ if(error("io error") == 1) return 1; } /* * setting the resource */ if(!net.id->resource) net.id->resource = RESOURCE; #ifdef DEBUG printf ("username: %s\nserver: %s\nresource: %s\npartial: %s\nfull: %s\n", net.id->user, net.id->server, net.id->resource, net.id->partial, net.id->full); #endif /* * disconnect the parser. */ iks_disconnect(net.parser); /* * delete the parser.. */ iks_parser_delete(net.parser); return 0; }