Changeset 451

Show
Ignore:
Timestamp:
05/11/04 02:48:09 (5 years ago)
Author:
morris
Message:

add messaging between hotline and wired users

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • wired/trunk/wired/hotline.c

    r429 r451  
    1 /* $Id: hotline.c,v 1.4 2004/05/05 20:00:48 morris Exp $ */ 
     1/* $Id: hotline.c,v 1.5 2004/05/11 00:48:09 morris Exp $ */ 
    22 
    33/* 
     
    318318                hl_id = transaction.id; 
    319319                 
    320                 wd_log(LOG_INFO, "transaction.type = %d", transaction.type); 
    321  
    322320                switch(transaction.type) { 
    323321                        case 101: 
     
    333331                        case 107: 
    334332                                if(hl_cmd_login() < 0) 
     333                                        goto close; 
     334                                break; 
     335                         
     336                        case 108: 
     337                                if(hl_cmd_msg() < 0) 
    335338                                        goto close; 
    336339                                break; 
     
    682685         
    683686        return 1; 
     687} 
     688 
     689 
     690 
     691int hl_cmd_msg(void) { 
     692        struct hl_client                *client = (struct hl_client *) pthread_getspecific(hl_client_key); 
     693        struct hl_parameters    parameters; 
     694        struct hl_field                 field; 
     695        unsigned char                   msg[8192]; 
     696        unsigned int                    uid = 0; 
     697        int                                             i; 
     698         
     699        /* read parameter count */ 
     700        if(hl_read_parameters(&parameters) < 0) 
     701                return -1; 
     702         
     703        /* read parameters */ 
     704        for(i = 0; i < parameters.count; i++) { 
     705                if(hl_read_field(&field) < 0) 
     706                        return -1; 
     707                 
     708                if(hl_read_buffer(client->buffer, field.size) < 0) 
     709                        return -1; 
     710                 
     711                switch(field.id) { 
     712                        case 101: 
     713                                strlcpy(msg, client->buffer, sizeof(msg)); 
     714                                break; 
     715                                 
     716                        case 103: 
     717                                if(field.size == 4) 
     718                                        uid = htonl(hl_get_long(client->buffer)); 
     719                                else if(field.size == 2) 
     720                                        uid = htons(hl_get_short(client->buffer)); 
     721                                break; 
     722                } 
     723        } 
     724         
     725        hl_wd_relay_msg(client, uid, msg); 
    684726} 
    685727 
     
    13811423 
    13821424 
     1425void hl_wd_relay_msg(struct hl_client *peer, unsigned int uid, char *buffer) { 
     1426        struct wd_client                *wd_client; 
     1427        struct hl_client                *hl_client; 
     1428        unsigned char                   data[2]; 
     1429        unsigned int                    length, nicklength; 
     1430         
     1431        /* get lengths */ 
     1432        length = strlen(buffer); 
     1433        nicklength = strlen(peer->nick); 
     1434 
     1435        /* get clients */ 
     1436        hl_client = hl_get_client(uid); 
     1437        wd_client = wd_get_client(uid, 1); 
     1438         
     1439        if(hl_client) { 
     1440                /* send message header */ 
     1441                hl_send_transaction(hl_client->sd, 0, 104, 1, 0, 16 + nicklength + length); 
     1442                hl_send_parameters(hl_client->sd, 3); 
     1443 
     1444                /* send uid */ 
     1445                hl_send_field(hl_client->sd, 103, 2); 
     1446                hl_set_short(data, peer->uid); 
     1447                hl_send_buffer(hl_client->sd, data, sizeof(data)); 
     1448 
     1449                /* send nick */ 
     1450                hl_send_field(hl_client->sd, 102, nicklength); 
     1451                hl_send_buffer(hl_client->sd, peer->nick, nicklength); 
     1452 
     1453                /* send buffer */ 
     1454                hl_send_field(hl_client->sd, 101, length); 
     1455                hl_send_buffer(hl_client->sd, buffer, length); 
     1456        } 
     1457        else if(wd_client) { 
     1458                /* convert msg */ 
     1459                hl_convert_buffer(hl_conv_to, buffer, length); 
     1460         
     1461                /* send message */ 
     1462                pthread_mutex_lock(&(wd_client->ssl_mutex)); 
     1463                wd_sreply(wd_client->ssl, 305, "%lu%s%s", 
     1464                        peer->uid, 
     1465                        WD_FIELD_SEPARATOR, 
     1466                        buffer); 
     1467                pthread_mutex_unlock(&(wd_client->ssl_mutex)); 
     1468        } 
     1469} 
     1470 
     1471 
     1472 
     1473void wd_hl_relay_msg(unsigned int fromuid, unsigned touid, char *nick, char *msg) { 
     1474        struct hl_client        *hl_client; 
     1475        unsigned char           data[2]; 
     1476        unsigned int            length, nicklength; 
     1477         
     1478        /* convert */ 
     1479        hl_convert_buffer(hl_conv_from, nick, nicklength); 
     1480        hl_convert_buffer(hl_conv_from, msg, length); 
     1481         
     1482        /* get lengths */ 
     1483        length = strlen(msg); 
     1484        nicklength = strlen(nick); 
     1485         
     1486        /* get client */ 
     1487        hl_client = hl_get_client(touid); 
     1488         
     1489        if(hl_client) { 
     1490                /* send message header */ 
     1491                hl_send_transaction(hl_client->sd, 0, 104, 1, 0, 16 + nicklength + length); 
     1492                hl_send_parameters(hl_client->sd, 3); 
     1493 
     1494                /* send uid */ 
     1495                hl_send_field(hl_client->sd, 103, 2); 
     1496                hl_set_short(data, fromuid); 
     1497                hl_send_buffer(hl_client->sd, data, sizeof(data)); 
     1498 
     1499                /* send nick */ 
     1500                hl_send_field(hl_client->sd, 102, nicklength); 
     1501                hl_send_buffer(hl_client->sd, nick, nicklength); 
     1502 
     1503                /* send buffer */ 
     1504                hl_send_field(hl_client->sd, 101, length); 
     1505                hl_send_buffer(hl_client->sd, msg, length); 
     1506        } 
     1507} 
     1508 
     1509 
     1510 
    13831511void hl_wd_relay_nick(struct hl_client *peer) { 
    13841512        struct wd_list_node             *client_node; 
  • wired/trunk/wired/server.c

    r449 r451  
    1 /* $Id: server.c,v 1.9 2004/05/09 14:47:26 morris Exp $ */ 
     1/* $Id: server.c,v 1.10 2004/05/11 00:48:09 morris Exp $ */ 
    22 
    33/* 
     
    934934                                                                                 kCFStringEncodingUTF8); 
    935935 
    936                 wd_net_service = CFNetServiceCreate(NULL, CFSTR(""), CFSTR("_wired._tcp"), 
    937                                                                                         name, wd_frozen_settings.port); 
     936                wd_net_service = CFNetServiceCreate(NULL, CFSTR(""), CFSTR("_wired._tcp"), 
     937                                                                                        name, wd_frozen_settings.port); 
    938938 
    939939                CFNetServiceRegister(wd_net_service, NULL);