static int build_http_request(const char* domainName, const char* path, int ocspReqSz, byte* buf, int bufSize) { word32 domainNameLen, pathLen, ocspReqSzStrLen, completeLen; char ocspReqSzStr[6]; domainNameLen = (word32)XSTRLEN(domainName); pathLen = (word32)XSTRLEN(path); ocspReqSzStrLen = Word16ToString(ocspReqSzStr, (word16)ocspReqSz); completeLen = domainNameLen + pathLen + ocspReqSzStrLen + 84; if (completeLen > (word32)bufSize) return 0; XSTRNCPY((char*)buf, "POST ", 5); buf += 5; XSTRNCPY((char*)buf, path, pathLen); buf += pathLen; XSTRNCPY((char*)buf, " HTTP/1.1\r\nHost: ", 17); buf += 17; XSTRNCPY((char*)buf, domainName, domainNameLen); buf += domainNameLen; XSTRNCPY((char*)buf, "\r\nContent-Length: ", 18); buf += 18; XSTRNCPY((char*)buf, ocspReqSzStr, ocspReqSzStrLen); buf += ocspReqSzStrLen; XSTRNCPY((char*)buf, "\r\nContent-Type: application/ocsp-request\r\n\r\n", 44); return completeLen; }
static int tcp_connect(SOCKET_T* sockfd, const char* ip, word16 port) { struct sockaddr_storage addr; int sockaddr_len = sizeof(struct sockaddr_in); XMEMSET(&addr, 0, sizeof(addr)); #ifdef HAVE_GETADDRINFO { struct addrinfo hints; struct addrinfo* answer = NULL; char strPort[6]; XMEMSET(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; if (Word16ToString(strPort, port) == 0) { CYASSL_MSG("invalid port number for OCSP responder"); return -1; } if (getaddrinfo(ip, strPort, &hints, &answer) < 0 || answer == NULL) { CYASSL_MSG("no addr info for OCSP responder"); return -1; } sockaddr_len = answer->ai_addrlen; XMEMCPY(&addr, answer->ai_addr, sockaddr_len); freeaddrinfo(answer); } #else /* HAVE_GETADDRINFO */ { struct hostent* entry = gethostbyname(ip); struct sockaddr_in *sin = (struct sockaddr_in *)&addr; if (entry) { sin->sin_family = AF_INET; sin->sin_port = htons(port); XMEMCPY(&sin->sin_addr.s_addr, entry->h_addr_list[0], entry->h_length); } else { CYASSL_MSG("no addr info for OCSP responder"); return -1; } } #endif /* HAVE_GETADDRINFO */ *sockfd = socket(addr.ss_family, SOCK_STREAM, 0); #ifdef USE_WINDOWS_API if (*sockfd == INVALID_SOCKET) { CYASSL_MSG("bad socket fd, out of fds?"); return -1; } #else if (*sockfd < 0) { CYASSL_MSG("bad socket fd, out of fds?"); return -1; } #endif if (connect(*sockfd, (struct sockaddr *)&addr, sockaddr_len) != 0) { CYASSL_MSG("OCSP responder tcp connect failed"); return -1; } return 0; }
static int tcp_connect(SOCKET_T* sockfd, const char* ip, word16 port) { struct sockaddr_storage addr; int sockaddr_len = sizeof(struct sockaddr_in); XMEMSET(&addr, 0, sizeof(addr)); #ifdef HAVE_GETADDRINFO { struct addrinfo hints; struct addrinfo* answer = NULL; char strPort[6]; XMEMSET(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; if (Word16ToString(strPort, port) == 0) { CYASSL_MSG("invalid port number for OCSP responder"); return -1; } if (getaddrinfo(ip, strPort, &hints, &answer) < 0 || answer == NULL) { CYASSL_MSG("no addr info for OCSP responder"); return -1; } sockaddr_len = answer->ai_addrlen; XMEMCPY(&addr, answer->ai_addr, sockaddr_len); freeaddrinfo(answer); } #else /* HAVE_GETADDRINFO */ { struct hostent* entry = gethostbyname(ip); struct sockaddr_in *sin = (struct sockaddr_in *)&addr; if (entry) { sin->sin_family = AF_INET; sin->sin_port = htons(port); XMEMCPY(&sin->sin_addr.s_addr, entry->h_addr_list[0], entry->h_length); } else { CYASSL_MSG("no addr info for OCSP responder"); return -1; } } #endif /* HAVE_GETADDRINFO */ *sockfd = socket(addr.ss_family, SOCK_STREAM, 0); #ifdef USE_WINDOWS_API if (*sockfd == INVALID_SOCKET) { #else /* USE_WINDOWS_API */ if (*sockfd < 0) { #endif /* USE_WINDOWS_API */ CYASSL_MSG("bad socket fd, out of fds?"); return -1; } if (connect(*sockfd, (struct sockaddr *)&addr, sockaddr_len) != 0) { CYASSL_MSG("OCSP responder tcp connect failed"); return -1; } return 0; } static int build_http_request(const char* domainName, const char* path, int ocspReqSz, byte* buf, int bufSize) { word32 domainNameLen, pathLen, ocspReqSzStrLen, completeLen; char ocspReqSzStr[6]; domainNameLen = (word32)XSTRLEN(domainName); pathLen = (word32)XSTRLEN(path); ocspReqSzStrLen = Word16ToString(ocspReqSzStr, ocspReqSz); completeLen = domainNameLen + pathLen + ocspReqSzStrLen + 84; if (completeLen > (word32)bufSize) return 0; XSTRNCPY((char*)buf, "POST ", 5); buf += 5; XSTRNCPY((char*)buf, path, pathLen); buf += pathLen; XSTRNCPY((char*)buf, " HTTP/1.1\r\nHost: ", 17); buf += 17; XSTRNCPY((char*)buf, domainName, domainNameLen); buf += domainNameLen; XSTRNCPY((char*)buf, "\r\nContent-Length: ", 18); buf += 18; XSTRNCPY((char*)buf, ocspReqSzStr, ocspReqSzStrLen); buf += ocspReqSzStrLen; XSTRNCPY((char*)buf, "\r\nContent-Type: application/ocsp-request\r\n\r\n", 44); return completeLen; }