Sun, 30 Apr 2000 21:47:04 +0000
[gaim-migrate @ 210]
Made the receive non-blocking, added a cancel button, and a few other updates.
No, sending a file to someone does not work yet. Be patient.
| 2 | 1 | |
| 2 | #include <aim.h> | |
| 3 | ||
| 4 | /* | |
| 5 | * aim_add_buddy() | |
| 6 | * | |
| 7 | * Adds a single buddy to your buddy list after login. | |
| 8 | * | |
| 9 | */ | |
| 10 | u_long aim_add_buddy(struct aim_conn_t *conn, char *sn ) | |
| 11 | { | |
| 12 | struct command_tx_struct newpacket; | |
| 13 | ||
| 14 | if( !sn ) | |
| 15 | return -1; | |
| 16 | ||
| 17 | if (conn) | |
| 18 | newpacket.conn = conn; | |
| 19 | else | |
| 20 | newpacket.conn = aim_getconn_type(AIM_CONN_TYPE_BOS); | |
| 21 | ||
| 22 | newpacket.lock = 1; | |
| 23 | newpacket.type = 0x0002; | |
| 24 | newpacket.commandlen = 11 + strlen( sn ); | |
| 25 | newpacket.data = (char *)malloc( newpacket.commandlen ); | |
| 26 | ||
| 27 | newpacket.data[0] = 0x00; | |
| 28 | newpacket.data[1] = 0x03; | |
| 29 | newpacket.data[2] = 0x00; | |
| 30 | newpacket.data[3] = 0x04; | |
| 31 | newpacket.data[4] = 0x00; | |
| 32 | newpacket.data[5] = 0x00; | |
| 33 | ||
| 34 | /* SNAC reqid */ | |
| 35 | newpacket.data[6] = (aim_snac_nextid >> 24) & 0xFF; | |
| 36 | newpacket.data[7] = (aim_snac_nextid >> 16) & 0xFF; | |
| 37 | newpacket.data[8] = (aim_snac_nextid >> 8) & 0xFF; | |
| 38 | newpacket.data[9] = (aim_snac_nextid) & 0xFF; | |
| 39 | ||
| 40 | /* length of screenname */ | |
| 41 | newpacket.data[10] = strlen( sn ); | |
| 42 | ||
| 43 | memcpy( &(newpacket.data[11]), sn, strlen( sn ) ); | |
| 44 | ||
| 45 | aim_tx_enqueue( &newpacket ); | |
| 46 | ||
| 47 | { | |
| 48 | struct aim_snac_t snac; | |
| 49 | ||
| 50 | snac.id = aim_snac_nextid; | |
| 51 | snac.family = 0x0003; | |
| 52 | snac.type = 0x0004; | |
| 53 | snac.flags = 0x0000; | |
| 54 | ||
| 55 | snac.data = malloc( strlen( sn ) + 1 ); | |
| 56 | memcpy( snac.data, sn, strlen( sn ) + 1 ); | |
| 57 | ||
| 58 | aim_newsnac( &snac ); | |
| 59 | } | |
| 60 | ||
| 61 | return( aim_snac_nextid++ ); | |
| 62 | } | |
| 63 | ||
| 64 | u_long aim_remove_buddy(struct aim_conn_t *conn, char *sn ) | |
| 65 | { | |
| 66 | struct command_tx_struct newpacket; | |
| 67 | ||
| 68 | if( !sn ) | |
| 69 | return -1; | |
| 70 | ||
| 71 | if (conn) | |
| 72 | newpacket.conn = conn; | |
| 73 | else | |
| 74 | newpacket.conn = aim_getconn_type(AIM_CONN_TYPE_BOS); | |
| 75 | ||
| 76 | newpacket.lock = 1; | |
| 77 | newpacket.type = 0x0002; | |
| 78 | newpacket.commandlen = 11 + strlen(sn); | |
| 79 | newpacket.data = (char *)malloc( newpacket.commandlen ); | |
| 80 | ||
| 81 | newpacket.data[0] = 0x00; | |
| 82 | newpacket.data[1] = 0x03; | |
| 83 | newpacket.data[2] = 0x00; | |
| 84 | newpacket.data[3] = 0x05; | |
| 85 | newpacket.data[4] = 0x00; | |
| 86 | newpacket.data[5] = 0x00; | |
| 87 | ||
| 88 | /* SNAC reqid */ | |
| 89 | newpacket.data[6] = (aim_snac_nextid >> 24) & 0xFF; | |
| 90 | newpacket.data[7] = (aim_snac_nextid >> 16) & 0xFF; | |
| 91 | newpacket.data[8] = (aim_snac_nextid >> 8) & 0xFF; | |
| 92 | newpacket.data[9] = (aim_snac_nextid) & 0xFF; | |
| 93 | ||
| 94 | /* length of screenname */ | |
| 95 | newpacket.data[10] = strlen( sn ); | |
| 96 | ||
| 97 | memcpy( &(newpacket.data[11]), sn, strlen( sn ) ); | |
| 98 | ||
| 99 | aim_tx_enqueue( &newpacket ); | |
| 100 | ||
| 101 | { | |
| 102 | struct aim_snac_t snac; | |
| 103 | ||
| 104 | snac.id = aim_snac_nextid; | |
| 105 | snac.family = 0x0003; | |
| 106 | snac.type = 0x0005; | |
| 107 | snac.flags = 0x0000; | |
| 108 | ||
| 109 | snac.data = malloc( strlen( sn ) + 1 ); | |
| 110 | memcpy( snac.data, sn, strlen( sn ) + 1 ); | |
| 111 | ||
| 112 | aim_newsnac( &snac ); | |
| 113 | } | |
| 114 | ||
| 115 | return( aim_snac_nextid++ ); | |
| 116 | } | |
| 117 |