예제 #1
0
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;
	}
}
예제 #2
0
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;
}
예제 #3
0
파일: jabber.c 프로젝트: jmmorato/elogames
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;

}
예제 #4
0
파일: test_iks.c 프로젝트: fjaeckel/cjabber
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;
}