(*new_sock)->ops = socket_getops_byname(name, type);
if (!(*new_sock)->ops) {
talloc_free((*new_sock));
- return status;
+ return NT_STATUS_INVALID_PARAMETER;
}
status = (*new_sock)->ops->init((*new_sock));
return NT_STATUS_INVALID_PARAMETER;
}
- if (sock->state != SOCKET_STATE_CLIENT_CONNECTED ||
+ if (sock->state != SOCKET_STATE_CLIENT_CONNECTED &&
sock->state != SOCKET_STATE_SERVER_CONNECTED) {
return NT_STATUS_INVALID_PARAMETER;
}
return NT_STATUS_INVALID_PARAMETER;
}
- if (sock->state != SOCKET_STATE_CLIENT_CONNECTED ||
+ if (sock->state != SOCKET_STATE_CLIENT_CONNECTED &&
sock->state != SOCKET_STATE_SERVER_CONNECTED) {
return NT_STATUS_INVALID_PARAMETER;
}
return sock->ops->get_peer_addr(sock, mem_ctx);
}
-int socket_get_peer_port(struct socket_context *sock, TALLOC_CTX *mem_ctx)
+int socket_get_peer_port(struct socket_context *sock)
{
if (!sock->ops->get_peer_port) {
return -1;
}
- return sock->ops->get_peer_port(sock, mem_ctx);
+ return sock->ops->get_peer_port(sock);
}
char *socket_get_my_addr(struct socket_context *sock, TALLOC_CTX *mem_ctx)
return sock->ops->get_my_addr(sock, mem_ctx);
}
-int socket_get_my_port(struct socket_context *sock, TALLOC_CTX *mem_ctx)
+int socket_get_my_port(struct socket_context *sock)
{
if (!sock->ops->get_my_port) {
return -1;
}
- return sock->ops->get_my_port(sock, mem_ctx);
+ return sock->ops->get_my_port(sock);
}
-int socket_get_fd(struct socket_context *sock, TALLOC_CTX *mem_ctx)
+int socket_get_fd(struct socket_context *sock)
{
if (!sock->ops->get_fd) {
return -1;
}
- return sock->ops->get_fd(sock, mem_ctx);
+ return sock->ops->get_fd(sock);
}
const struct socket_ops *socket_getops_byname(const char *name, enum socket_type type)
NTSTATUS (*set_option)(struct socket_context *sock, const char *option, const char *val);
char *(*get_peer_addr)(struct socket_context *sock, TALLOC_CTX *mem_ctx);
- int (*get_peer_port)(struct socket_context *sock, TALLOC_CTX *mem_ctx);
+ int (*get_peer_port)(struct socket_context *sock);
char *(*get_my_addr)(struct socket_context *sock, TALLOC_CTX *mem_ctx);
- int (*get_my_port)(struct socket_context *sock, TALLOC_CTX *mem_ctx);
+ int (*get_my_port)(struct socket_context *sock);
- int (*get_fd)(struct socket_context *sock, TALLOC_CTX *mem_ctx);
+ int (*get_fd)(struct socket_context *sock);
};
enum socket_state {
return NT_STATUS_FOOBAR;
}
- ret = bind(sock->fd, &my_addr, sizeof(my_addr));
+ ret = bind(sock->fd, (struct sockaddr *)&my_addr, sizeof(my_addr));
if (ret == -1) {
/* TODO: we need to map from errno to NTSTATUS here! */
return NT_STATUS_FOOBAR;
}
- ret = connect(sock->fd, &srv_addr, sizeof(srv_addr));
+ ret = connect(sock->fd, (const struct sockaddr *)&srv_addr, sizeof(srv_addr));
if (ret == -1) {
/* TODO: we need to map from errno to NTSTATUS here! */
return NT_STATUS_FOOBAR;
struct in_addr ip_addr;
int ret;
- ZERO_STRUCT(my_addr);
-
ret = inet_aton(my_address, &ip_addr);
if (ret == 0) {
/* not a valid ipv4 address */
return NT_STATUS_FOOBAR;
}
+ ZERO_STRUCT(my_addr);
#ifdef HAVE_SOCK_SIN_LEN
my_addr.sin_len = sizeof(my_addr);
#endif
my_addr.sin_port = htons(port);
my_addr.sin_family = PF_INET;
- ret = bind(sock->fd, &my_addr, sizeof(my_addr));
+ ret = bind(sock->fd, (struct sockaddr *)&my_addr, sizeof(my_addr));
if (ret == -1) {
/* TODO: we need to map from errno to NTSTATUS here! */
return NT_STATUS_FOOBAR;
}
}
- return NT_STATUS_NOT_IMPLEMENTED;
+ sock->state= SOCKET_STATE_SERVER_LISTEN;
+
+ return NT_STATUS_OK;
}
static NTSTATUS ipv4_tcp_accept(struct socket_context *sock, struct socket_context **new_sock, uint32_t flags)
return NULL;
}
-static int ipv4_tcp_get_peer_port(struct socket_context *sock, TALLOC_CTX *mem_ctx)
+static int ipv4_tcp_get_peer_port(struct socket_context *sock)
{
return -1;
}
return NULL;
}
-static int ipv4_tcp_get_my_port(struct socket_context *sock, TALLOC_CTX *mem_ctx)
+static int ipv4_tcp_get_my_port(struct socket_context *sock)
{
return -1;
}
-static int ipv4_tcp_get_fd(struct socket_context *sock, TALLOC_CTX *mem_ctx)
+static int ipv4_tcp_get_fd(struct socket_context *sock)
{
return sock->fd;
}