mirror of https://git.kore.io/kore.git
cleanup.
This commit is contained in:
parent
01c1a8f8f8
commit
31a9a70d5a
|
@ -208,12 +208,13 @@ struct pysocket_data {
|
||||||
int state;
|
int state;
|
||||||
size_t length;
|
size_t length;
|
||||||
struct kore_buf buffer;
|
struct kore_buf buffer;
|
||||||
|
struct pysocket *socket;
|
||||||
|
struct kore_timer *timer;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
struct sockaddr_in ipv4;
|
struct sockaddr_in ipv4;
|
||||||
struct sockaddr_un sun;
|
struct sockaddr_un sun;
|
||||||
} sendaddr;
|
} sendaddr;
|
||||||
struct pysocket *socket;
|
|
||||||
struct kore_timer *timer;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pysocket_op {
|
struct pysocket_op {
|
||||||
|
|
34
src/python.c
34
src/python.c
|
@ -19,6 +19,7 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
#include <sys/un.h>
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
@ -1680,13 +1681,11 @@ pysocket_sendto(struct pysocket *sock, PyObject *args)
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
if (!PyArg_ParseTuple(args, "siy*", &ip, &port, &buf))
|
if (!PyArg_ParseTuple(args, "siy*", &ip, &port, &buf))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
if (port <= 0 || port >= USHRT_MAX) {
|
if (port <= 0 || port >= USHRT_MAX) {
|
||||||
PyErr_SetString(PyExc_RuntimeError, "invalid port");
|
PyErr_SetString(PyExc_RuntimeError, "invalid port");
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AF_UNIX:
|
case AF_UNIX:
|
||||||
if (!PyArg_ParseTuple(args, "sy*", &sockaddr, &buf))
|
if (!PyArg_ParseTuple(args, "sy*", &sockaddr, &buf))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
@ -1708,12 +1707,17 @@ pysocket_sendto(struct pysocket *sock, PyObject *args)
|
||||||
break;
|
break;
|
||||||
case AF_UNIX:
|
case AF_UNIX:
|
||||||
op->data.sendaddr.sun.sun_family = AF_UNIX;
|
op->data.sendaddr.sun.sun_family = AF_UNIX;
|
||||||
size_t maxwrite = sizeof(op->data.sendaddr.sun.sun_path);
|
|
||||||
if (kore_strlcpy(op->data.sendaddr.sun.sun_path, sockaddr,
|
if (kore_strlcpy(op->data.sendaddr.sun.sun_path, sockaddr,
|
||||||
maxwrite) >= maxwrite)
|
sizeof(op->data.sendaddr.sun.sun_path)) >=
|
||||||
fatal("pysocket_sendto: failed to write path");
|
sizeof(op->data.sendaddr.sun.sun_path)) {
|
||||||
|
Py_DECREF(ret);
|
||||||
|
PyErr_SetString(PyExc_RuntimeError,
|
||||||
|
"unix socket path too long");
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Py_DECREF(ret);
|
||||||
PyErr_SetString(PyExc_RuntimeError, "unsupported family");
|
PyErr_SetString(PyExc_RuntimeError, "unsupported family");
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
@ -2083,24 +2087,20 @@ pysocket_async_recv(struct pysocket_op *op)
|
||||||
ret = read(op->data.fd, op->data.buffer.data,
|
ret = read(op->data.fd, op->data.buffer.data,
|
||||||
op->data.buffer.length);
|
op->data.buffer.length);
|
||||||
} else {
|
} else {
|
||||||
|
sendaddr = (struct sockaddr *)&op->data.sendaddr;
|
||||||
switch (op->data.socket->family) {
|
switch (op->data.socket->family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
socklen = sizeof(op->data.sendaddr.ipv4);
|
socklen = sizeof(op->data.sendaddr.ipv4);
|
||||||
sendaddr = (struct sockaddr *)&op->data.sendaddr.ipv4;
|
|
||||||
break;
|
break;
|
||||||
case AF_UNIX:
|
case AF_UNIX:
|
||||||
socklen = sizeof(op->data.sendaddr.sun);
|
socklen = sizeof(op->data.sendaddr.sun);
|
||||||
sendaddr = (struct sockaddr *)&op->data.sendaddr.sun;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
PyErr_SetString(PyExc_RuntimeError, "Unsupported family");
|
fatal("non AF_INET/AF_UNIX in %s", __func__);
|
||||||
return (NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = recvfrom(op->data.fd, op->data.buffer.data,
|
ret = recvfrom(op->data.fd, op->data.buffer.data,
|
||||||
op->data.buffer.length, 0,
|
op->data.buffer.length, 0, sendaddr, &socklen);
|
||||||
sendaddr,
|
|
||||||
&socklen);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
|
@ -2141,6 +2141,7 @@ pysocket_async_recv(struct pysocket_op *op)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
break;
|
break;
|
||||||
case AF_UNIX:
|
case AF_UNIX:
|
||||||
|
printf("'%s'\n", op->data.sendaddr.sun.sun_path);
|
||||||
if ((tuple = Py_BuildValue("(sN)",
|
if ((tuple = Py_BuildValue("(sN)",
|
||||||
op->data.sendaddr.sun.sun_path, bytes)) == NULL)
|
op->data.sendaddr.sun.sun_path, bytes)) == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
@ -2166,8 +2167,8 @@ static PyObject *
|
||||||
pysocket_async_send(struct pysocket_op *op)
|
pysocket_async_send(struct pysocket_op *op)
|
||||||
{
|
{
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
const struct sockaddr *sendaddr;
|
|
||||||
socklen_t socklen;
|
socklen_t socklen;
|
||||||
|
const struct sockaddr *sendaddr;
|
||||||
|
|
||||||
if (!(op->data.evt.flags & KORE_EVENT_WRITE)) {
|
if (!(op->data.evt.flags & KORE_EVENT_WRITE)) {
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
@ -2179,18 +2180,17 @@ pysocket_async_send(struct pysocket_op *op)
|
||||||
op->data.buffer.data + op->data.buffer.offset,
|
op->data.buffer.data + op->data.buffer.offset,
|
||||||
op->data.buffer.length - op->data.buffer.offset);
|
op->data.buffer.length - op->data.buffer.offset);
|
||||||
} else {
|
} else {
|
||||||
|
sendaddr = (const struct sockaddr *)&op->data.sendaddr;
|
||||||
|
|
||||||
switch (op->data.socket->family) {
|
switch (op->data.socket->family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
socklen = sizeof(op->data.sendaddr.ipv4);
|
socklen = sizeof(op->data.sendaddr.ipv4);
|
||||||
sendaddr = (struct sockaddr *)&op->data.sendaddr.ipv4;
|
|
||||||
break;
|
break;
|
||||||
case AF_UNIX:
|
case AF_UNIX:
|
||||||
socklen = sizeof(op->data.sendaddr.sun);
|
socklen = sizeof(op->data.sendaddr.sun);
|
||||||
sendaddr = (struct sockaddr *)&op->data.sendaddr.sun;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
PyErr_SetString(PyExc_RuntimeError, "unsupported family");
|
fatal("non AF_INET/AF_UNIX in %s", __func__);
|
||||||
return (NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = sendto(op->data.fd,
|
ret = sendto(op->data.fd,
|
||||||
|
|
Loading…
Reference in New Issue