Changeset 662
- Timestamp:
- 10/08/08 12:44:06 (4 months ago)
- Location:
- trunk
- Files:
-
- 7 modified
-
c2s/c2s.c (modified) (19 diffs)
-
c2s/main.c (modified) (10 diffs)
-
sx/Makefile.am (modified) (1 diff)
-
sx/plugins.h (modified) (1 diff)
-
sx/sx.c (modified) (4 diffs)
-
sx/sx.h (modified) (1 diff)
-
util/uri.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/c2s/c2s.c
r639 r662 91 91 92 92 sx_kill(s); 93 93 94 94 return -1; 95 95 } … … 117 117 "Connection: close\r\n\r\n"; 118 118 char *answer; 119 119 120 120 len = strlen(sess->c2s->http_forward) + strlen(http); 121 121 answer = malloc(len * sizeof(char)); 122 122 sprintf (answer, http, sess->c2s->http_forward); 123 123 124 124 log_write(sess->c2s->log, LOG_NOTICE, "[%d] bouncing HTTP request to %s", sess->fd->fd, sess->c2s->http_forward); 125 125 126 126 /* send HTTP answer */ 127 127 len = send(sess->fd->fd, answer, len-1, 0); 128 128 129 129 free(answer); 130 130 131 131 /* close connection */ 132 132 sx_kill(s); … … 150 150 if(MIO_WOULDBLOCK) 151 151 return 0; 152 152 153 153 if(s->state >= state_OPEN && sess->resources != NULL) 154 154 log_write(sess->c2s->log, LOG_NOTICE, "[%d] [%s] write error: %s (%d)", sess->fd->fd, jid_user(sess->resources->jid), MIO_STRERROR(MIO_ERROR), MIO_ERROR); 155 155 else 156 156 log_write(sess->c2s->log, LOG_NOTICE, "[%d] [%s. port=%d] write error: %s (%d)", sess->fd->fd, sess->ip, sess->port, MIO_STRERROR(MIO_ERROR), MIO_ERROR); 157 157 158 158 sx_kill(s); 159 159 160 160 return -1; 161 161 … … 168 168 169 169 break; 170 170 171 171 case event_STREAM: 172 172 … … 272 272 log_debug(ZONE, "invalid jid data"); 273 273 sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_BAD_REQUEST)); 274 274 275 275 return 0; 276 276 } … … 344 344 log_debug(ZONE, "no/empty resource given to unbind"); 345 345 sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_BAD_REQUEST)); 346 346 347 347 return 0; 348 348 } … … 352 352 log_debug(ZONE, "cannot resourceprep"); 353 353 sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_BAD_REQUEST)); 354 354 355 355 return 0; 356 356 } … … 364 364 log_debug(ZONE, "resource /%s not bound", resource_buf); 365 365 sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_ITEM_NOT_FOUND)); 366 366 367 367 return 0; 368 368 } … … 446 446 log_debug(ZONE, "packet without 'from' on multiple resource stream"); 447 447 } 448 448 449 449 sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_UNKNOWN_SENDER)); 450 450 451 451 return 0; 452 452 } … … 458 458 459 459 break; 460 460 461 461 case event_OPEN: 462 462 … … 593 593 if(c2s->stanza_rate_total != 0) 594 594 sess->stanza_rate = rate_new(c2s->stanza_rate_total, c2s->stanza_rate_seconds, c2s->stanza_rate_wait); 595 596 /* give IP to SX */ 597 sess->s->ip = sess->ip; 595 598 596 599 /* find out which port this is */ … … 667 670 } 668 671 } while(xhash_iter_next(c2s->sessions)); 669 672 670 673 xhash_zap(c2s->sm_avail, from); 671 674 } … … 708 711 709 712 sx_kill(s); 710 713 711 714 return -1; 712 715 } … … 738 741 739 742 log_write(c2s->log, LOG_NOTICE, "[%d] [router] write error: %s (%d)", c2s->fd->fd, MIO_STRERROR(MIO_ERROR), MIO_ERROR); 740 743 741 744 sx_kill(s); 742 745 743 746 return -1; 744 747 … … 847 850 } else 848 851 c2s->server_fd = NULL; 849 852 850 853 #ifdef HAVE_SSL 851 854 if(c2s->local_ssl_port != 0 && c2s->local_pemfile != NULL) { … … 869 872 exit(1); 870 873 } 871 874 872 875 /* we're online */ 873 876 c2s->online = c2s->started = 1; … … 1051 1054 if(sess->bound < 1){ 1052 1055 sess->active = 0; 1053 1056 1054 1057 /* return the unbind result to the client */ 1055 1058 if(sess->result != NULL) { … … 1060 1063 if(replaced) 1061 1064 sx_error(sess->s, stream_err_CONFLICT, NULL); 1062 1065 1063 1066 /* close them */ 1064 1067 sx_close(sess->s); 1065 1068 1066 1069 nad_free(nad); 1067 1070 return 0; … … 1138 1141 ires->next = bres->next; 1139 1142 } 1140 1143 1141 1144 jid_free(bres->jid); 1142 1145 free(bres); -
trunk/c2s/main.c
r639 r662 355 355 switch(cb) { 356 356 case sx_sasl_cb_GET_REALM: 357 357 358 358 if(s->req_to == NULL) /* this shouldn't happen */ 359 359 my_realm = ""; … … 415 415 return sx_sasl_ret_FAIL; 416 416 break; 417 417 418 418 case sx_sasl_cb_CHECK_AUTHZID: 419 419 creds = (sx_sasl_creds_t) arg; … … 495 495 return sx_sasl_ret_OK; 496 496 } 497 497 498 498 r = snprintf(buf, sizeof(buf), "authreg.mechanisms.sasl.%s",mechbuf); 499 499 if (r < -1 || r > sizeof(buf)) … … 558 558 union xhashv xhv; 559 559 time_t check_time = 0; 560 560 561 561 #ifdef HAVE_UMASK 562 562 umask((mode_t) 0027); … … 571 571 WSADATA wsaData; 572 572 int err; 573 573 574 574 wVersionRequested = MAKEWORD( 2, 2 ); 575 575 576 576 err = WSAStartup( wVersionRequested, &wsaData ); 577 577 if ( err != 0 ) { … … 691 691 } 692 692 #endif 693 693 694 694 /* get sasl online */ 695 695 c2s->sx_sasl = sx_env_plugin(c2s->sx_env, sx_sasl_init, "xmpp", _c2s_sx_sasl_callback, (void *) c2s); … … 708 708 /* get stanza ack up */ 709 709 sx_env_plugin(c2s->sx_env, sx_ack_init); 710 711 /* and user IP address plugin */ 712 sx_env_plugin(c2s->sx_env, sx_address_init); 710 713 #endif 711 714 … … 758 761 } 759 762 } 760 763 761 764 /* cleanup dead sess (before sx_t as sess->result uses sx_t nad cache) */ 762 765 while(jqueue_size(c2s->dead_sess) > 0) { … … 808 811 } 809 812 } 810 813 811 814 check_time = time(NULL); 812 815 } … … 814 817 815 818 log_write(c2s->log, LOG_NOTICE, "shutting down"); 816 819 817 820 if(xhash_iter_first(c2s->sessions)) 818 821 do { -
trunk/sx/Makefile.am
r639 r662 22 22 23 23 if ENABLE_EXPERIMENTAL 24 libsx_la_SOURCES += ack.c 24 libsx_la_SOURCES += ack.c address.c 25 25 endif -
trunk/sx/plugins.h
r564 r662 148 148 149 149 150 /* Stanza Acknowledgements plugin */151 150 #ifdef ENABLE_EXPERIMENTAL 152 151 152 /* Stanza Acknowledgements plugin */ 153 153 /** init function */ 154 154 JABBERD2_API int sx_ack_init(sx_env_t env, sx_plugin_t p, va_list args); 155 156 /* My IP Address plugin */ 157 /** init function */ 158 JABBERD2_API int sx_address_init(sx_env_t env, sx_plugin_t p, va_list args); 155 159 156 160 #endif /* ENABLE_EXPERIMENTAL */ -
trunk/sx/sx.c
r545 r662 100 100 if(s->auth_method != NULL) free(s->auth_method); 101 101 if(s->auth_id != NULL) free(s->auth_id); 102 102 103 103 if(s->env != NULL) { 104 104 _sx_debug(ZONE, "freeing %d env plugins", s->env->nplugins); … … 158 158 temp.cb_arg = s->cb_arg; 159 159 160 temp.ip = s->ip; 160 161 temp.flags = s->flags; 161 162 temp.reentry = s->reentry; … … 185 186 186 187 s->env = temp.env; 188 s->ip = temp.ip; 187 189 s->flags = temp.flags; 188 190 s->reentry = temp.reentry; … … 250 252 { 251 253 char *new_heap; 252 254 253 255 assert( before >= 0 ); 254 256 assert( after >= 0 ); -
trunk/sx/sx.h
r545 r662 247 247 int tag; 248 248 249 /* IP address of the connection */ 250 /* pointing to sess.ip and owned by sess structure */ 251 char *ip; 252 249 253 /* callback */ 250 254 sx_callback_t cb; -
trunk/util/uri.h
r650 r662 54 54 #define uri_XDATA "jabber:x:data" 55 55 #define uri_OOB "jabber:x:oob" 56 #define uri_ADDRESS_FEATURE "http://affinix.com/jabber/address" 56 57 57 58 /* these are used by SM mainly */
