Changeset 662

Show
Ignore:
Timestamp:
10/08/08 12:44:06 (4 months ago)
Author:
smoku
Message:

Implemented My IP Address extension

Location:
trunk
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • trunk/c2s/c2s.c

    r639 r662  
    9191 
    9292                sx_kill(s); 
    93                  
     93 
    9494                return -1; 
    9595            } 
     
    117117                    "Connection: close\r\n\r\n"; 
    118118                char *answer; 
    119      
     119 
    120120                len = strlen(sess->c2s->http_forward) + strlen(http); 
    121121                answer = malloc(len * sizeof(char)); 
    122122                sprintf (answer, http, sess->c2s->http_forward); 
    123      
     123 
    124124                log_write(sess->c2s->log, LOG_NOTICE, "[%d] bouncing HTTP request to %s", sess->fd->fd, sess->c2s->http_forward); 
    125      
     125 
    126126                /* send HTTP answer */ 
    127127                len = send(sess->fd->fd, answer, len-1, 0); 
    128128 
    129129                free(answer); 
    130      
     130 
    131131                /* close connection */ 
    132132                sx_kill(s); 
     
    150150            if(MIO_WOULDBLOCK) 
    151151                return 0; 
    152              
     152 
    153153            if(s->state >= state_OPEN && sess->resources != NULL) 
    154154                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); 
    155155            else 
    156156                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 
    158158            sx_kill(s); 
    159          
     159 
    160160            return -1; 
    161161 
     
    168168 
    169169            break; 
    170              
     170 
    171171        case event_STREAM: 
    172172 
     
    272272                        log_debug(ZONE, "invalid jid data"); 
    273273                        sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_BAD_REQUEST)); 
    274                          
     274 
    275275                        return 0; 
    276276                    } 
     
    344344                    log_debug(ZONE, "no/empty resource given to unbind"); 
    345345                    sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_BAD_REQUEST)); 
    346                          
     346 
    347347                    return 0; 
    348348                } 
     
    352352                    log_debug(ZONE, "cannot resourceprep"); 
    353353                    sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_BAD_REQUEST)); 
    354                      
     354 
    355355                    return 0; 
    356356                } 
     
    364364                    log_debug(ZONE, "resource /%s not bound", resource_buf); 
    365365                    sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_ITEM_NOT_FOUND)); 
    366                      
     366 
    367367                    return 0; 
    368368                } 
     
    446446                        log_debug(ZONE, "packet without 'from' on multiple resource stream"); 
    447447                    } 
    448      
     448 
    449449                    sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_UNKNOWN_SENDER)); 
    450      
     450 
    451451                    return 0; 
    452452                } 
     
    458458 
    459459            break; 
    460          
     460 
    461461        case event_OPEN: 
    462462 
     
    593593            if(c2s->stanza_rate_total != 0) 
    594594                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; 
    595598 
    596599            /* find out which port this is */ 
     
    667670                } 
    668671            } while(xhash_iter_next(c2s->sessions)); 
    669          
     672 
    670673        xhash_zap(c2s->sm_avail, from); 
    671674    } 
     
    708711 
    709712                sx_kill(s); 
    710                  
     713 
    711714                return -1; 
    712715            } 
     
    738741 
    739742            log_write(c2s->log, LOG_NOTICE, "[%d] [router] write error: %s (%d)", c2s->fd->fd, MIO_STRERROR(MIO_ERROR), MIO_ERROR); 
    740          
     743 
    741744            sx_kill(s); 
    742          
     745 
    743746            return -1; 
    744747 
     
    847850                    } else 
    848851                        c2s->server_fd = NULL; 
    849              
     852 
    850853#ifdef HAVE_SSL 
    851854                    if(c2s->local_ssl_port != 0 && c2s->local_pemfile != NULL) { 
     
    869872                    exit(1); 
    870873                } 
    871              
     874 
    872875                /* we're online */ 
    873876                c2s->online = c2s->started = 1; 
     
    10511054                    if(sess->bound < 1){ 
    10521055                        sess->active = 0; 
    1053                      
     1056 
    10541057                        /* return the unbind result to the client */ 
    10551058                        if(sess->result != NULL) { 
     
    10601063                        if(replaced) 
    10611064                            sx_error(sess->s, stream_err_CONFLICT, NULL); 
    1062                          
     1065 
    10631066                        /* close them */ 
    10641067                        sx_close(sess->s); 
    1065      
     1068 
    10661069                        nad_free(nad); 
    10671070                        return 0; 
     
    11381141                            ires->next = bres->next; 
    11391142                        } 
    1140      
     1143 
    11411144                        jid_free(bres->jid); 
    11421145                        free(bres); 
  • trunk/c2s/main.c

    r639 r662  
    355355    switch(cb) { 
    356356        case sx_sasl_cb_GET_REALM: 
    357              
     357 
    358358            if(s->req_to == NULL)   /* this shouldn't happen */ 
    359359                my_realm = ""; 
     
    415415            return sx_sasl_ret_FAIL; 
    416416            break; 
    417          
     417 
    418418        case sx_sasl_cb_CHECK_AUTHZID: 
    419419            creds = (sx_sasl_creds_t) arg; 
     
    495495                    return sx_sasl_ret_OK; 
    496496            } 
    497              
     497 
    498498            r = snprintf(buf, sizeof(buf), "authreg.mechanisms.sasl.%s",mechbuf); 
    499499            if (r < -1 || r > sizeof(buf)) 
     
    558558    union xhashv xhv; 
    559559    time_t check_time = 0; 
    560      
     560 
    561561#ifdef HAVE_UMASK 
    562562    umask((mode_t) 0027); 
     
    571571        WSADATA wsaData; 
    572572        int err; 
    573          
     573 
    574574        wVersionRequested = MAKEWORD( 2, 2 ); 
    575          
     575 
    576576        err = WSAStartup( wVersionRequested, &wsaData ); 
    577577        if ( err != 0 ) { 
     
    691691    } 
    692692#endif 
    693              
     693 
    694694    /* get sasl online */ 
    695695    c2s->sx_sasl = sx_env_plugin(c2s->sx_env, sx_sasl_init, "xmpp", _c2s_sx_sasl_callback, (void *) c2s); 
     
    708708    /* get stanza ack up */ 
    709709    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); 
    710713#endif 
    711714 
     
    758761            } 
    759762        } 
    760              
     763 
    761764        /* cleanup dead sess (before sx_t as sess->result uses sx_t nad cache) */ 
    762765        while(jqueue_size(c2s->dead_sess) > 0) { 
     
    808811                } 
    809812            } 
    810      
     813 
    811814            check_time = time(NULL); 
    812815        } 
     
    814817 
    815818    log_write(c2s->log, LOG_NOTICE, "shutting down"); 
    816      
     819 
    817820    if(xhash_iter_first(c2s->sessions)) 
    818821        do { 
  • trunk/sx/Makefile.am

    r639 r662  
    2222 
    2323if ENABLE_EXPERIMENTAL 
    24 libsx_la_SOURCES += ack.c 
     24libsx_la_SOURCES += ack.c address.c 
    2525endif 
  • trunk/sx/plugins.h

    r564 r662  
    148148 
    149149 
    150 /* Stanza Acknowledgements plugin */ 
    151150#ifdef ENABLE_EXPERIMENTAL 
    152151 
     152/* Stanza Acknowledgements plugin */ 
    153153/** init function */ 
    154154JABBERD2_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 */ 
     158JABBERD2_API int                         sx_address_init(sx_env_t env, sx_plugin_t p, va_list args); 
    155159 
    156160#endif /* ENABLE_EXPERIMENTAL */ 
  • trunk/sx/sx.c

    r545 r662  
    100100    if(s->auth_method != NULL) free(s->auth_method); 
    101101    if(s->auth_id != NULL) free(s->auth_id); 
    102      
     102 
    103103    if(s->env != NULL) { 
    104104        _sx_debug(ZONE, "freeing %d env plugins", s->env->nplugins); 
     
    158158    temp.cb_arg = s->cb_arg; 
    159159 
     160    temp.ip = s->ip; 
    160161    temp.flags = s->flags; 
    161162    temp.reentry = s->reentry; 
     
    185186 
    186187    s->env = temp.env; 
     188    s->ip = temp.ip; 
    187189    s->flags = temp.flags; 
    188190    s->reentry = temp.reentry; 
     
    250252{ 
    251253    char *new_heap; 
    252      
     254 
    253255    assert( before >= 0 ); 
    254256    assert( after >= 0 ); 
  • trunk/sx/sx.h

    r545 r662  
    247247    int                      tag; 
    248248 
     249        /* IP address of the connection */ 
     250        /* pointing to sess.ip and owned by sess structure */ 
     251        char                    *ip; 
     252 
    249253    /* callback */ 
    250254    sx_callback_t            cb; 
  • trunk/util/uri.h

    r650 r662  
    5454#define uri_XDATA       "jabber:x:data" 
    5555#define uri_OOB         "jabber:x:oob" 
     56#define uri_ADDRESS_FEATURE "http://affinix.com/jabber/address" 
    5657 
    5758/* these are used by SM mainly */