APNs C++后端Provider搭建

void PushServer::token2bytes(const char *token, char *bytes)

{

 int val;

while(*token)

{

sscanf(token, "%2x", &val);

*(bytes++) = (char)val;

token += 2;

while(*token == ' ')

{

++token;

}

}

}



unsigned long PushServer::packMessage(char *message, const unsigned char command, const char *tokenBytes, const char *payload)

{

unsigned long payloadLength = strlen(payload);

unsigned short networkTokenLength = htons(32);

unsigned shrot networkPayloadLength = htons(payloadLength);


memcpy(message, &command, sizeof(unsigned char));

message += sizeof(unsigned char);

memcpy(message, &newworkTokenLength, sizeof(unsigned short));

message +=sizeof(unsigned short);

memcpy(message, tokenBytes,32);

message += 32;

memcpy(message,&newtworkPayloadLength,sizeof(unsigned short));

message += sizeof(unsigned short);

memcpy(message, payload, payLoadLength);

return payloadLength + 37;


}



void PushServer::SendMsg(msg)

{

SSL *ssl = nullptr;

SSL_CTX *ctx = nullptr;

char token[] = "";

char payload[1024] = {0};


const host = "gateway,sandbox.push.apple.com:2195";

BIO *conn;

SSL_library_init();


ctx = SSL_CTX_new (SSLv23_method());

if(SSL_CTX_use_certificate_chain_file(ctx, CERTFILE) != 1)

{

}

conn = BIO_new_connect(host);


if(!conn)

{


}

ssl = SSL_new(ctx);

SSL_set_bio(ssl,conn,conn);


if(ssl == nullptr)

{

return;

}

if(SSL_connect(ssl) <= 0)

{

}

char tokenBytes[32];

char message[293];

unsigned long msgLength;


token2bytes(deviceToken, tokenBytes);

msgLength = packMessage(message, 0, tokenBytes, payload);

SSL_write(ssl, message,(int)msgLength);


SSL_shutdown(ssl);

SSL_free(ssl);

SSL_CTX_free(ctx);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值