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);
}