SilcBool silc_server_send_notify_channel_change(SilcServer server, SilcPacketStream stream, SilcBool broadcast, SilcChannelID *old_id, SilcChannelID *new_id) { SilcBuffer idp1, idp2; SilcBool ret = FALSE; if (!server || !stream) return ret; idp1 = silc_id_payload_encode((void *)old_id, SILC_ID_CHANNEL); idp2 = silc_id_payload_encode((void *)new_id, SILC_ID_CHANNEL); if (!idp1 || !idp2) return ret; ret = silc_server_send_notify(server, stream, broadcast, SILC_NOTIFY_TYPE_CHANNEL_CHANGE, 2, idp1->data, silc_buffer_len(idp1), idp2->data, silc_buffer_len(idp2)); silc_buffer_free(idp1); silc_buffer_free(idp2); return ret; }
SilcBool silc_server_send_new_id(SilcPacketStream stream, SilcBool broadcast, void *id, SilcIdType id_type) { SilcBuffer idp; SilcBool ret = FALSE; if (!stream || !id) return ret; SILC_LOG_DEBUG(("Sending new ID (%s)", silc_id_render(id, id_type))); idp = silc_id_payload_encode(id, id_type); if (!idp) return ret; ret = silc_packet_send(stream, SILC_PACKET_NEW_ID, broadcast ? SILC_PACKET_FLAG_BROADCAST : 0, idp->data, silc_buffer_len(idp)); silc_buffer_free(idp); return ret; }
void event_channel_connection_init(struct event *event) { struct channel_connection *chconn = event_get_control(event, channel_conn); if( !IS_SILC_CHCONN(chconn) ) return; SilcBuffer idp; struct i_silc_gateway_connection *silc_gwconn = (struct i_silc_gateway_connection *)chconn->gwconn; const char *channel_str = chconn->channel->name; idp = silc_id_payload_encode(silc_gwconn->conn->local_id, SILC_ID_CLIENT); i_assert(idp != NULL); silc_client_command_call(silc_gwconn->client, silc_gwconn->conn, "JOIN", channel_str); // silc_client_command_send(silc_gwconn->client, silc_gwconn->conn, // SILC_COMMAND_JOIN, 0, 2, 1, channel_str, // strlen(channel_str), 2, silc_buffer_len(idp), idp->len); }