static int lua_proto_get_err_packet (lua_State *L) { size_t packet_len; const char *packet_str = luaL_checklstring(L, 1, &packet_len); network_mysqld_err_packet_t *err_packet; network_packet packet; GString s; int err = 0; s.str = (char *)packet_str; s.len = packet_len; packet.data = &s; packet.offset = 0; err_packet = network_mysqld_err_packet_new(); err = err || network_mysqld_proto_get_err_packet(&packet, err_packet); if (err) { network_mysqld_err_packet_free(err_packet); luaL_error(L, "%s: network_mysqld_proto_get_err_packet() failed", G_STRLOC); return 0; } lua_newtable(L); LUA_EXPORT_STR(err_packet, errmsg); LUA_EXPORT_STR(err_packet, sqlstate); LUA_EXPORT_INT(err_packet, errcode); network_mysqld_err_packet_free(err_packet); return 1; }
static PyObject * python_proto_get_err_packet(PyObject *self, PyObject *args){ int packet_len; const char* packet_str; if(!PyArg_ParseTuple(args, "s#", &packet_str, &packet_len)) return NULL; network_mysqld_err_packet_t *err_packet; network_packet packet; GString s; int err = 0; s.str = (char *)packet_str; s.len = packet_len; packet.data = &s; packet.offset = 0; err_packet = network_mysqld_err_packet_new(); err = err || network_mysqld_proto_get_err_packet(&packet, err_packet); if (err) { network_mysqld_err_packet_free(err_packet); PyErr_SetString(PyExc_ValueError, "network_mysqld_proto_get_err_packet() failed"); return NULL; } PyObject *result = Spain_New(); if(!result) return NULL; #define PYTHON_EXPORT_STR(x, y) \ PyObject *s_ ## y = PyString_FromString(x->y->str);\ if(!s_ ## y){\ Py_DECREF(result);\ network_mysqld_err_packet_free(err_packet);\ return NULL;\ }\ PyObject_SetAttrString(result, #y, s_ ## y);\ Py_DECREF(s_ ## y); #define PYTHON_EXPORT_INT(x, y) \ PyObject *s_ ## y = PyInt_FromLong(x->y);\ if(!s_ ## y){\ Py_DECREF(result);\ network_mysqld_err_packet_free(err_packet);\ return NULL;\ }\ PyObject_SetAttrString(result, #y, s_ ## y);\ Py_DECREF(s_ ## y); PYTHON_EXPORT_STR(err_packet, errmsg) PYTHON_EXPORT_STR(err_packet, sqlstate) PYTHON_EXPORT_INT(err_packet, errcode) network_mysqld_err_packet_free(err_packet); return result; }
void t_err_packet_append(void) { network_mysqld_err_packet_t *err_packet; network_packet *packet; err_packet = network_mysqld_err_packet_new(); packet = network_packet_new(); packet->data = g_string_new(NULL); /* check if a empty ok-packet is encoded correctly */ g_assert_cmpint(0, ==, network_mysqld_proto_append_err_packet(packet->data, err_packet)); g_assert_cmpint(9, ==, packet->data->len); g_assert_cmpint(TRUE, ==, g_memeq(S(packet->data), C("\xff\x00\x00#07000"))); g_assert_cmpint(0, ==, network_mysqld_proto_get_err_packet(packet, err_packet)); /* check if encoding and decoding works */ err_packet->errcode = 3; g_string_assign_len(err_packet->errmsg, C("test")); g_string_assign_len(err_packet->sqlstate, C("01234")); g_string_truncate(packet->data, 0); packet->offset = 0; g_assert_cmpint(0, ==, network_mysqld_proto_append_err_packet(packet->data, err_packet)); g_assert_cmpint(13, ==, packet->data->len); g_assert_cmpint(TRUE, ==, g_memeq(S(packet->data), C("\xff\x03\x00#01234test"))); network_mysqld_err_packet_free(err_packet); err_packet = network_mysqld_err_packet_new(); g_assert_cmpint(0, ==, network_mysqld_proto_get_err_packet(packet, err_packet)); g_assert_cmpint(3, ==, err_packet->errcode); g_assert_cmpstr("01234", ==, err_packet->sqlstate->str); g_assert_cmpstr("test", ==, err_packet->errmsg->str); network_mysqld_err_packet_free(err_packet); /* check if too-short packet is denied */ err_packet = network_mysqld_err_packet_new(); g_string_truncate(packet->data, 0); packet->offset = 0; g_assert_cmpint(-1, ==, network_mysqld_proto_get_err_packet(packet, err_packet)); network_mysqld_err_packet_free(err_packet); g_string_free(packet->data, TRUE); network_packet_free(packet); }
void t_err_packet_new(void) { network_mysqld_err_packet_t *err_packet; err_packet = network_mysqld_err_packet_new(); g_assert(err_packet); network_mysqld_err_packet_free(err_packet); }
static int lua_proto_append_err_packet (lua_State *L) { GString *packet; network_mysqld_err_packet_t *err_packet; luaL_checktype(L, 1, LUA_TTABLE); err_packet = network_mysqld_err_packet_new(); LUA_IMPORT_STR(err_packet, errmsg); LUA_IMPORT_STR(err_packet, sqlstate); LUA_IMPORT_INT(err_packet, errcode); packet = g_string_new(NULL); network_mysqld_proto_append_err_packet(packet, err_packet); network_mysqld_err_packet_free(err_packet); lua_pushlstring(L, S(packet)); g_string_free(packet, TRUE); return 1; }