Beispiel #1
0
/* PROTO */
void
imcomm_im_send_message(void *handle, const char *whom, const char *msg, int automsg)
{
	pkt_t          *packet;

	packet = pkt_init(28 + strlen(whom) + strlen(msg) + (4 * automsg));

	/*
         * Message cookie?
         *
         * Putting something random seems to work.
         */
	pkt_add32(packet, 0x01020304);
	pkt_add32(packet, 0x05060708);

	pkt_add16(packet, 0x0001);
	pkt_add8(packet, (uint8_t) strlen(whom));
	pkt_addraw(packet, (uint8_t *) whom, strlen(whom));
	pkt_add16(packet, 0x0002);
	pkt_add16(packet, (uint16_t) (uint16_t) (strlen(msg) + 13));
	pkt_add32(packet, 0x05010001);
	pkt_add8(packet, 0x01);
	pkt_add16(packet, 0x0101);
	pkt_add16(packet, (uint16_t) (uint16_t) (strlen(msg) + 4));
	pkt_add32(packet, 0x00000000);
	pkt_addraw(packet, (uint8_t *) msg, strlen(msg));

	if (automsg) {
		pkt_add16(packet, 0x0004);
		pkt_add16(packet, 0x0000);
	}
	snac_sendpkt(handle, 0x04, 0x06, packet, (automsg ? 0 : 1));
	pkt_free(packet);
}
Beispiel #2
0
/* PROTO */
IMCOMM_RET
snac_send_cli_update(void *handle)
{
	IMCOMM_RET      ret;
	pkt_t          *pkt;

	/*
         * This makes the server send us extended status information
         */
#if 0
	pkt = pkt_init(12);
	pkt_add16(pkt, 0x001d);
	pkt_add16(pkt, 0x0008);
	pkt_add32(pkt, 0x00020404);
	pkt_add32(pkt, 0x00000000);
#endif

	pkt = pkt_init(8);
	pkt_add16(pkt, 0x0006);
	pkt_add16(pkt, 0x0004);
	if (((IMCOMM *) handle)->isinvisible)
		pkt_add32(pkt, 0x00000100);
	else
		pkt_add32(pkt, 0x00000000);

	ret = snac_sendpkt(handle, 0x01, 0x1e, pkt, 0);
	pkt_free(pkt);
	return ret;
}
Beispiel #3
0
/****************************************************************************
 * ow_write_header(struct owctx *ow)
 *
 * Write OLE header block.
 */
void ow_write_header(struct owctx *ow)
{
  int root_start;
  int num_lists;
  struct pkt *pkt;
  int i;

  if (ow->biff_only)
    return;

  ow_calculate_sizes(ow);

  root_start = ow->root_start;
  num_lists = ow->list_blocks;

  pkt = pkt_init(0, VARIABLE_PACKET);
  pkt_add32(pkt, 0xD0CF11E0); /* OLE document file id part 1 */
  pkt_add32(pkt, 0xA1B11AE1); /* OLE document file id part 2 */
  pkt_add32_le(pkt, 0x00); /* UID of this file (can be all 0's) 1/4 */
  pkt_add32_le(pkt, 0x00); /* UID of this file (can be all 0's) 2/4 */
  pkt_add32_le(pkt, 0x00); /* UID of this file (can be all 0's) 3/4 */
  pkt_add32_le(pkt, 0x00); /* UID of this file (can be all 0's) 4/4 */
  pkt_add16_le(pkt, 0x3E); /* Revision number (almost always 0x003E) */
  pkt_add16_le(pkt, 0x03); /* Version number (almost always 0x0003) */
  pkt_add16(pkt, 0xFEFF);  /* Byte order identifier:
                            * (0xFEFF = Little Endian)
                            * (0xFFFE = Big Endian)    */
  pkt_add16_le(pkt, 0x09); /* 2^x  (9 = 512 bytes) */
  pkt_add32_le(pkt, 0x06); /* Unknown 5 */
  pkt_add32_le(pkt, 0x00); /* Unknown 5 */
  pkt_add32_le(pkt, 0x00); /* Unknown 5 */
  pkt_add32_le(pkt, num_lists); /* num_bbd_blocks */
  pkt_add32_le(pkt, root_start); /* root_startblock */
  pkt_add32_le(pkt, 0x00); /* Unknown 6 */
  pkt_add32_le(pkt, 0x1000); /* Unknown 6 */
  pkt_add32_le(pkt, -2);  /* sbd_startblock */
  pkt_add32_le(pkt, 0x00); /* Unknown 7 */
  pkt_add32_le(pkt, -2); /* Unknown 7 */
  pkt_add32_le(pkt, 0x00); /* Unknown 7 */

  for (i = 1; i <= num_lists; i++) {
    root_start++;
    pkt_add32_le(pkt, root_start);

  }

  for (i = num_lists; i <= 108; i++) {
    pkt_add32_le(pkt, -1); /* Unused */
  }

  ow->io_handler.write(ow->io_handle,pkt->data, pkt->len);

  pkt_free(pkt);
}
Beispiel #4
0
/* PROTO */
IMCOMM_RET
snac_send_icbm_params(void *handle, uint16_t channel, uint16_t max_msg_size)
{
	IMCOMM_RET      ret;
	pkt_t          *packet;

	packet = pkt_init(16);
	pkt_add32(packet, 0x00000000);
	pkt_add16(packet, 0x000b);
	pkt_add16(packet, 0x1f40);
	pkt_add16(packet, ((IMCOMM *) handle)->max_sender_warning);
	pkt_add16(packet, ((IMCOMM *) handle)->max_receiver_warning);
	pkt_add32(packet, 0x00000000);

	ret = snac_sendpkt(handle, 0x04, 0x02, packet, 0);
	pkt_free(packet);
	return ret;
}
Beispiel #5
0
/* PROTO */
IMCOMM_RET
multi_ssiact_cliready(void *handle)
{
	struct MultiPacket *multipkt;
	pkt_t          *cliupdpkt;
	unsigned char   cli_ready_packet[] = {0x00,
		0x13, 0x00, 0x03, 0x01, 0x10, 0x08, 0xE5, 0x00, 0x0b, 0x00, 0x01,
		0x01, 0x10, 0x08, 0xe5, 0x00, 0x0a, 0x00, 0x01, 0x01, 0x10,
		0x08, 0xe5, 0x00, 0x09, 0x00, 0x01, 0x01, 0x10, 0x08, 0xe5,
		0x00, 0x08, 0x00, 0x01, 0x01, 0x04, 0x00, 0x01, 0x00, 0x06,
		0x00, 0x01, 0x01, 0x10, 0x08, 0xe5, 0x00, 0x04, 0x00, 0x01,
		0x01, 0x10, 0x08, 0xe5, 0x00, 0x03, 0x00, 0x01, 0x01, 0x10,
		0x08, 0xe5, 0x00, 0x02, 0x00, 0x01, 0x01, 0x10, 0x08, 0xe5,
		0x00, 0x01, 0x00, 0x04, 0x01, 0x10, 0x08, 0xe5
	};

	multipkt = MultiPktInit();

	cliupdpkt = pkt_init(12);
	pkt_add16(cliupdpkt, 0x001d);
	pkt_add16(cliupdpkt, 0x0008);
	pkt_add32(cliupdpkt, 0x00020404);
	pkt_add32(cliupdpkt, 0x00000000);

	snac_addToMulti(handle, multipkt, 0x01, 0x1e, cliupdpkt->data,
			cliupdpkt->len, 0);
	snac_addToMulti(handle, multipkt, 0x01, 0x02, cli_ready_packet,
			sizeof(cli_ready_packet), 0);
	snac_addToMulti(handle, multipkt, 0x13, 0x07, NULL, 0, 0);

	flap_sendMulti(handle, multipkt);
	MultiPktFree(multipkt);
	pkt_free(cliupdpkt);

	if (((IMCOMM *) handle)->callbacks[IMCOMM_ERROR])
		((IMCOMM *) handle)->callbacks[IMCOMM_ERROR] (handle,
						   IMCOMM_STATUS_CONNECTED);

	return IMCOMM_RET_OK;
}
Beispiel #6
0
/* PROTO */
void
snac_addToMulti(void *handle, struct MultiPacket * mpkt, uint16_t family, uint16_t subtype, unsigned char *data, uint16_t len, int updateidle)
{
	pkt_t          *snac_packet;

	snac_packet = pkt_init(len + 10);
	pkt_add16(snac_packet, family);
	pkt_add16(snac_packet, subtype);
	pkt_add16(snac_packet, 0);
	pkt_add32(snac_packet, ((IMCOMM *) handle)->snacreq);
	pkt_addraw(snac_packet, (uint8_t *) data, len);
	((IMCOMM *) handle)->snacreq++;

	flap_addToMulti(mpkt, 0x02, snac_packet->data, snac_packet->len,
			updateidle);
	pkt_free(snac_packet);
}
Beispiel #7
0
/* PROTO */
IMCOMM_RET
snac_send(void *handle, uint16_t family, uint16_t subtype, unsigned char *data, uint16_t len, int updateidle)
{
	pkt_t          *snac_packet;
	IMCOMM_RET      ret;

	if (((IMCOMM *) handle)->srv_pause)
		return IMCOMM_RET_OK;

	snac_packet = pkt_init(len + 10);
	pkt_add16(snac_packet, family);
	pkt_add16(snac_packet, subtype);
	pkt_add16(snac_packet, 0);
	pkt_add32(snac_packet, ((IMCOMM *) handle)->snacreq);
	pkt_addraw(snac_packet, (uint8_t *) data, len);
	((IMCOMM *) handle)->snacreq++;

	ret = flap_sendpkt(handle, 0x02, snac_packet, updateidle);
	pkt_free(snac_packet);
	return ret;
}
Beispiel #8
0
/* PROTO */
IMCOMM_RET
snac_set_location_info(void *handle)
{
	pkt_t          *packet;
	char           *idstr = "text/aolrtf; charset=\"iso-8859-1\"";
	int             pktlen = 0;
	uint8_t         capabilities[] =
	{0x09, 0x46, 0x13, 0x46, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44,
		0x45, 0x53, 0x54,
		0x00, 0x00,
		0x09, 0x46, 0x13, 0x4d, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44,
		0x45, 0x53, 0x54, 0x00, 0x00,
		0x09, 0x46, 0x00, 0x00, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44,
		0x45, 0x53, 0x54, 0x00, 0x00
	};

	snac_send_cli_update(handle);

	if (((IMCOMM *) handle)->profile_str != NULL)
		pktlen +=
			8 + strlen(idstr) +
			strlen((char *) ((IMCOMM *) handle)->profile_str);
	if (((IMCOMM *) handle)->away_msg != NULL)
		pktlen += strlen((char *) ((IMCOMM *) handle)->away_msg);

	packet =
		pkt_init(pktlen + 10 + 8 + 4 + strlen(idstr) +
			 sizeof(capabilities));

	pkt_add16(packet, 0x0001);
	pkt_add16(packet, (uint16_t) strlen(idstr));
	pkt_addraw(packet, (uint8_t *) idstr, strlen(idstr));

	if (((IMCOMM *) handle)->profile_str != NULL) {
		pkt_add16(packet, 0x0002);
		pkt_add16(packet,
			  (uint16_t) strlen((char *) ((IMCOMM *) handle)->
					    profile_str));
		pkt_addraw(packet, ((IMCOMM *) handle)->profile_str,
			 strlen((char *) ((IMCOMM *) handle)->profile_str));
	}
	pkt_add16(packet, 0x0003);
	pkt_add16(packet, (uint16_t) strlen(idstr));
	pkt_addraw(packet, (uint8_t *) idstr, strlen(idstr));
	pkt_add16(packet, 0x0004);

	if (((IMCOMM *) handle)->away_msg != NULL) {
		pkt_add16(packet,
			  (uint16_t) strlen((char *) ((IMCOMM *) handle)->
					    away_msg));
		pkt_addraw(packet, ((IMCOMM *) handle)->away_msg,
			   (uint16_t) strlen((char *) ((IMCOMM *) handle)->
					     away_msg));
	} else {
		pkt_add16(packet, 0x0000);
	}

	pkt_add16(packet, 0x0005);
	pkt_add16(packet, (uint16_t) sizeof(capabilities));
	pkt_addraw(packet, capabilities, sizeof(capabilities));
	pkt_add16(packet, 0x0006);
	pkt_add16(packet, 0x0006);
	pkt_add16(packet, 0x0004);
	pkt_add32(packet, 0x00020002);

	snac_sendpkt(handle, 0x02, 0x04, packet, 0);
	pkt_free(packet);
	return IMCOMM_RET_OK;
}