added listen addr option
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
@@ -8,8 +9,33 @@
|
||||
|
||||
#include "socketHelp.h"
|
||||
|
||||
uint32_t addr2sin_addr(char *addr) {
|
||||
char *token;
|
||||
int i = 0;
|
||||
uint32_t addrNum = 0;
|
||||
unsigned long addrTempNum = 0;
|
||||
|
||||
token = strtok(addr, ".");
|
||||
while(token != NULL) {
|
||||
addrTempNum = strtoul(token, NULL,10);
|
||||
if ( addrTempNum > 255 ) {
|
||||
printf("Invalid IP octet: %ld\n", addrTempNum);
|
||||
|
||||
free(token);
|
||||
return -1;
|
||||
}
|
||||
addrNum = addrNum + ( addrTempNum << (8*(3-i)) );
|
||||
|
||||
token = strtok(NULL, ".");
|
||||
i++;
|
||||
}
|
||||
|
||||
free(token);
|
||||
return addrNum;
|
||||
}
|
||||
|
||||
SSL_CTX* InitServerCTX() {
|
||||
SSL_METHOD *method;
|
||||
const SSL_METHOD *method;
|
||||
SSL_CTX *ctx;
|
||||
|
||||
OpenSSL_add_all_algorithms();
|
||||
@@ -29,7 +55,7 @@ void LoadCertificates(SSL_CTX* ctx, char* certFile, char* keyFile) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
// Set local priv key from keyFile
|
||||
/// Set local priv key from keyFile
|
||||
if ( SSL_CTX_use_PrivateKey_file(ctx, keyFile, SSL_FILETYPE_PEM) <=0 ) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
exit(EXIT_FAILURE);
|
||||
@@ -42,13 +68,14 @@ void LoadCertificates(SSL_CTX* ctx, char* certFile, char* keyFile) {
|
||||
return;
|
||||
}
|
||||
|
||||
int createSecureSocket(int port, int *server_fd, struct sockaddr_in *address, int *addrlen, SSL_CTX **ctx, char certFile[], char keyFile[]) {
|
||||
int createSecureSocket(int port, int *server_fd, struct sockaddr_in *address, int *addrlen, uint32_t listenAddr,
|
||||
SSL_CTX **ctx, char certFile[], char keyFile[]) {
|
||||
|
||||
SSL_library_init();
|
||||
*ctx = InitServerCTX();
|
||||
LoadCertificates(*ctx, certFile, keyFile);
|
||||
|
||||
if ( createSocket(port, server_fd, address, addrlen) ) {
|
||||
if ( createSocket(port, server_fd, address, addrlen, listenAddr) ) {
|
||||
fprintf(stderr, "Error create socket\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
@@ -56,7 +83,7 @@ int createSecureSocket(int port, int *server_fd, struct sockaddr_in *address, in
|
||||
return 0;
|
||||
}
|
||||
|
||||
int createSocket(int port, int *server_fd, struct sockaddr_in *address, int *addrlen) {
|
||||
int createSocket(int port, int *server_fd, struct sockaddr_in *address, int *addrlen, uint32_t listenAddr) {
|
||||
int opt = 1;
|
||||
|
||||
// Create socket fd
|
||||
@@ -72,7 +99,11 @@ int createSocket(int port, int *server_fd, struct sockaddr_in *address, int *add
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
address->sin_family = AF_INET;
|
||||
address->sin_addr.s_addr = INADDR_ANY;
|
||||
if (listenAddr != -1) { // Checking to see if listenAddr is passed
|
||||
address->sin_addr.s_addr = htonl(listenAddr);
|
||||
} else { // Default to any addr
|
||||
address->sin_addr.s_addr = INADDR_ANY;
|
||||
}
|
||||
address->sin_port = htons (port);
|
||||
|
||||
// Attach to PORT
|
||||
|
||||
Reference in New Issue
Block a user