Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions pcap_pkthdr.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,20 @@ pcap_dealloc(register pkthdr* pp)

// pcap methods
static PyObject* p_getts(register pkthdr* pp, PyObject* args);
static PyObject* p_setts(register pkthdr* pp, PyObject* args);
static PyObject* p_getcaplen(register pkthdr* pp, PyObject* args);
static PyObject* p_setcaplen(register pkthdr* pp, PyObject* args);
static PyObject* p_getlen(register pkthdr* pp, PyObject* args);
static PyObject* p_setlen(register pkthdr* pp, PyObject* args);


static PyMethodDef p_methods[] = {
{"getts", (PyCFunction) p_getts, METH_VARARGS, "get timestamp tuple (seconds, microseconds) since the Epoch"},
{"setts", (PyCFunction) p_setts, METH_VARARGS, "set timestamp tuple (seconds, microseconds) since the Epoch"},
{"getcaplen", (PyCFunction) p_getcaplen, METH_VARARGS, "returns the length of portion present"},
{"setcaplen", (PyCFunction) p_setcaplen, METH_VARARGS, "sets the length of portion present"},
{"getlen", (PyCFunction) p_getlen, METH_VARARGS, "returns the length of the packet (off wire)"},
{"setlen", (PyCFunction) p_setlen, METH_VARARGS, "sets the length of the packet (off wire)"},
{NULL, NULL} /* sentinel */
};

Expand Down Expand Up @@ -156,6 +162,25 @@ p_getts(register pkthdr* pp, PyObject* args)
return Py_BuildValue("(ll)", pp->ts.tv_sec, pp->ts.tv_usec);
}

static PyObject*
p_setts(register pkthdr* pp, PyObject* args)
{
if (Py_TYPE(pp) != &Pkthdr_type) {
PyErr_SetString(PcapError, "Not a pkthdr object");
return NULL;
}

long tv_sec = 0;
long tv_usec = 0;
if (!PyArg_ParseTuple(args, "ll", &tv_sec, &tv_usec))
return NULL;

pp->ts.tv_sec = tv_sec;
pp->ts.tv_usec = tv_usec;
Py_INCREF(Py_None);
return Py_None;
}

static PyObject*
p_getcaplen(register pkthdr* pp, PyObject* args)
{
Expand All @@ -167,6 +192,22 @@ p_getcaplen(register pkthdr* pp, PyObject* args)
return Py_BuildValue("l", pp->caplen);
}

static PyObject*
p_setcaplen(register pkthdr* pp, PyObject* args)
{
if (Py_TYPE(pp) != &Pkthdr_type) {
PyErr_SetString(PcapError, "Not a pkthdr object");
return NULL;
}
long caplen = 0;
if (!PyArg_ParseTuple(args, "l", &caplen))
return NULL;

pp->caplen = caplen;
Py_INCREF(Py_None);
return Py_None;
}

static PyObject*
p_getlen(register pkthdr* pp, PyObject* args)
{
Expand All @@ -178,6 +219,23 @@ p_getlen(register pkthdr* pp, PyObject* args)
return Py_BuildValue("l", pp->len);
}

static PyObject*
p_setlen(register pkthdr* pp, PyObject* args)
{
if (Py_TYPE(pp) != &Pkthdr_type) {
PyErr_SetString(PcapError, "Not a pkthdr object");
return NULL;
}

long len = 0;
if (!PyArg_ParseTuple(args, "l", &len))
return NULL;

pp->len = len;
Py_INCREF(Py_None);
return Py_None;
}

int
pkthdr_to_native(PyObject *pyhdr, struct pcap_pkthdr *hdr)
{
Expand Down