|
|
|
@ -55,43 +55,6 @@ int http__context_cleanup(struct mosquitto *context)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int create_accept_key(const char *client_key, size_t client_key_len, char **encoded)
|
|
|
|
|
{
|
|
|
|
|
const EVP_MD *digest;
|
|
|
|
|
EVP_MD_CTX *evp;
|
|
|
|
|
uint8_t accept_key_hash[EVP_MAX_MD_SIZE];
|
|
|
|
|
unsigned int accept_key_hash_len;
|
|
|
|
|
|
|
|
|
|
digest = EVP_get_digestbyname("sha1");
|
|
|
|
|
if(!digest){
|
|
|
|
|
return MOSQ_ERR_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
evp = EVP_MD_CTX_new();
|
|
|
|
|
if(EVP_DigestInit_ex(evp, digest, NULL) == 0){
|
|
|
|
|
EVP_MD_CTX_free(evp);
|
|
|
|
|
return MOSQ_ERR_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
if(EVP_DigestUpdate(evp, client_key, client_key_len) == 0){
|
|
|
|
|
EVP_MD_CTX_free(evp);
|
|
|
|
|
return MOSQ_ERR_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
if(EVP_DigestUpdate(evp, "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",
|
|
|
|
|
strlen("258EAFA5-E914-47DA-95CA-C5AB0DC85B11")) == 0){
|
|
|
|
|
|
|
|
|
|
EVP_MD_CTX_free(evp);
|
|
|
|
|
return MOSQ_ERR_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
if(EVP_DigestFinal_ex(evp, accept_key_hash, &accept_key_hash_len) == 0){
|
|
|
|
|
EVP_MD_CTX_free(evp);
|
|
|
|
|
return MOSQ_ERR_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
EVP_MD_CTX_free(evp);
|
|
|
|
|
|
|
|
|
|
return base64__encode(accept_key_hash, accept_key_hash_len, encoded);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int http__write(struct mosquitto *mosq)
|
|
|
|
|
{
|
|
|
|
|
return packet__write(mosq);
|
|
|
|
@ -242,7 +205,7 @@ int http__read(struct mosquitto *mosq)
|
|
|
|
|
return MOSQ_ERR_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(create_accept_key(client_key, client_key_len, &accept_key)){
|
|
|
|
|
if(ws__create_accept_key(client_key, client_key_len, &accept_key)){
|
|
|
|
|
return MOSQ_ERR_UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|