static PyObject * pytrap_init(PyObject *self, PyObject *args, PyObject *keywds) { char **argv = NULL; char *arg; PyObject *argvlist; PyObject *strObj; int argc = 0, i, ifcin = 1, ifcout = 0; static char *kwlist[] = {"argv", "ifcin", "ifcout", NULL}; if (!PyArg_ParseTupleAndKeywords(args, keywds, "O!|ii", kwlist, &PyList_Type, &argvlist, &ifcin, &ifcout)) { return NULL; } argc = PyList_Size(argvlist); argv = calloc(argc, sizeof(char *)); for (i=0; i<argc; i++) { strObj = PyList_GetItem(argvlist, i); #if PY_MAJOR_VERSION >= 3 arg = PyUnicode_AsUTF8AndSize(strObj, NULL); #else arg = PyString_AS_STRING(strObj); #endif argv[i] = arg; } int ret = local_trap_init(argc, argv, module_info, ifcin, ifcout); if (ret != 0) { PyErr_SetString(TrapError, "Initialization failed"); return NULL; } Py_RETURN_NONE; }
static PyObject * pytrap_init(PyObject *self, PyObject *args, PyObject *keywds) { char **argv = NULL; char *arg; PyObject *argvlist; PyObject *strObj; int argc = 0, i, ifcin = 1, ifcout = 0; static char *kwlist[] = {"argv", "ifcin", "ifcout", NULL}; if (!PyArg_ParseTupleAndKeywords(args, keywds, "O!|ii", kwlist, &PyList_Type, &argvlist, &ifcin, &ifcout)) { return NULL; } argc = PyList_Size(argvlist); if (argc ==0) { PyErr_SetString(TrapError, "argv list must not be empty."); return NULL; } argv = calloc(argc, sizeof(char *)); for (i=0; i<argc; i++) { strObj = PyList_GetItem(argvlist, i); #if PY_MAJOR_VERSION >= 3 if (!PyUnicode_Check(strObj)) { #else if (!PyString_Check(strObj)) { #endif PyErr_SetString(TrapError, "argv must contain string."); goto failure; } #if PY_MAJOR_VERSION >= 3 arg = PyUnicode_AsUTF8AndSize(strObj, NULL); #else arg = PyString_AS_STRING(strObj); #endif argv[i] = arg; } int ret = local_trap_init(argc, argv, module_info, ifcin, ifcout); if (ret != 0) { PyErr_SetString(TrapError, "Initialization failed"); return NULL; } Py_RETURN_NONE; failure: free(argv); return NULL; } static PyObject * pytrap_send(PyObject *self, PyObject *args, PyObject *keywds) { uint32_t ifcidx = 0; PyObject *dataObj; char *data; Py_ssize_t data_size; static char *kwlist[] = {"data", "ifcidx", NULL}; if (!PyArg_ParseTupleAndKeywords(args, keywds, "O|I", kwlist, &dataObj, &ifcidx)) { return NULL; } if (PyByteArray_Check(dataObj)) { data_size = PyByteArray_Size(dataObj); data = PyByteArray_AsString(dataObj); } else if (PyBytes_Check(dataObj)) { PyBytes_AsStringAndSize(dataObj, &data, &data_size); } else { PyErr_SetString(PyExc_TypeError, "Argument data must be of bytes or bytearray type."); return NULL; } if (data_size > 0xFFFF) { PyErr_SetString(TrapError, "Data length is out of range (0-65535)"); return NULL; } int ret; Py_BEGIN_ALLOW_THREADS ret = trap_send(ifcidx, data, (uint16_t) data_size); Py_END_ALLOW_THREADS if (ret == TRAP_E_TIMEOUT) { PyErr_SetString(TimeoutError, "Timeout"); return NULL; } else if (ret == TRAP_E_BAD_IFC_INDEX) { PyErr_SetString(TrapError, "Bad index of IFC."); return NULL; } else if (ret == TRAP_E_TERMINATED) { PyErr_SetString(TrapTerminated, "IFC was terminated."); return NULL; } Py_RETURN_NONE; }