示例#1
0
文件: growl.c 项目: kissthink/GNTPCom
int growl_udp_notify( const char *const server,
                      const char *const appname,
                      const char *const notify,
                      const char *const title,
                      const char *const message ,
                      const char *const password )
{
	int notify_header_length = 28 + strlen(appname)+strlen(notify)+strlen(message)+strlen(title);
	unsigned char *data = (unsigned char*)malloc(notify_header_length);
	int pointer = 0;
	int rc = 0;

	uint8_t GROWL_PROTOCOL_VERSION  = 1;
	uint8_t GROWL_TYPE_NOTIFICATION = 1;

	uint16_t flags = ntohs(0);
	uint16_t appname_length = ntohs(strlen(appname));
	uint16_t notify_length = ntohs(strlen(notify));
	uint16_t title_length = ntohs(strlen(title));
	uint16_t message_length = ntohs(strlen(message));

	growl_init();
	memset( data , 0 ,  notify_header_length );
	
	pointer = 0;
	memcpy( data + pointer , &GROWL_PROTOCOL_VERSION , 1 );	
	pointer++;
	memcpy( data + pointer , &GROWL_TYPE_NOTIFICATION , 1 );
	pointer++;
	memcpy( data + pointer , &flags , 2 );
	pointer += 2;
	memcpy( data + pointer , &notify_length , 2 );	
	pointer += 2;
	memcpy( data + pointer , &title_length , 2 );	
	pointer += 2;
	memcpy( data + pointer , &message_length , 2 );	
	pointer += 2;
	memcpy( data + pointer , &appname_length , 2 );	
	pointer += 2;
	sprintf( (char*)data + pointer , notify );
	pointer += strlen(notify);
	sprintf( (char*)data + pointer , title );
	pointer += strlen(title);
	sprintf( (char*)data + pointer , message );
	pointer += strlen(message);
	sprintf( (char*)data + pointer , appname );
	pointer += strlen(appname);


	growl_append_md5( data , pointer , password );
	pointer += 16;


	rc = growl_tcp_datagram( server , data , pointer );
	free(data);
	return rc;
}
示例#2
0
int growl_udp_register( const char *const server , const char *const appname , const char **const notifications , const int notifications_count , const char *const password  )
{
    int register_header_length = 22+(int)strlen(appname);
    unsigned char *data;
    int pointer = 0;
    int rc = 0;
    int i=0;

    uint8_t GROWL_PROTOCOL_VERSION  = 1;
    uint8_t GROWL_TYPE_REGISTRATION = 0;

    uint16_t appname_length = ntohs((u_short)strlen(appname));
    uint8_t _notifications_count = notifications_count;
    uint8_t default_notifications_count = notifications_count;
    uint8_t j;

    growl_init();

    for(i=0;i<notifications_count;i++)
    {
        register_header_length += 3 + (int)strlen(notifications[i]);
    }
    data = (unsigned char*)PhAllocateSafe(register_header_length);
    if (!data) return -1;
    memset( data , 0 ,  register_header_length );


    pointer = 0;
    memcpy( data + pointer , &GROWL_PROTOCOL_VERSION , 1 );
    pointer++;
    memcpy( data + pointer , &GROWL_TYPE_REGISTRATION , 1 );
    pointer++;
    memcpy( data + pointer , &appname_length , 2 );
    pointer += 2;
    memcpy( data + pointer , &_notifications_count , 1 );
    pointer++;
    memcpy( data + pointer, &default_notifications_count , 1 );
    pointer++;
    sprintf( (char*)data + pointer , "%s" , appname );
    pointer += (int)strlen(appname);

    for(i=0;i<notifications_count;i++)
    {
        uint16_t notify_length = ntohs((u_short)strlen(notifications[i]));
        memcpy( data + pointer, &notify_length , 2 );
        pointer +=2;
        sprintf( (char*)data + pointer , "%s" , notifications[i] );
        pointer += (int)strlen(notifications[i]);
    }

    for(j=0;j<notifications_count;j++)
    {
        memcpy( data + pointer , &j , 1 );
        pointer++;
    }

    growl_append_md5( data , pointer , password );
    pointer += 16;

    rc = growl_tcp_datagram( server , data , pointer );
    PhFree(data);
    return rc;
}