56#define CONNPY_REQUIRE_VALID(connection) \
58 if (connection->target == nullptr) \
60 PyErr_SetString (PyExc_RuntimeError, \
61 _("Connection no longer exists.")); \
82 if (target ==
nullptr)
85 gdbpy_ref <connection_object> conn_obj;
97 if (conn_obj ==
nullptr)
99 conn_obj->target = target;
103 conn_obj = conn_obj_iter->second;
105 gdb_assert (conn_obj !=
nullptr);
123 gdb_assert (target !=
nullptr);
128 gdb_assert (conn.get () != Py_None);
130 if (PyList_Append (list.get (), conn.get ()) < 0)
134 return list.release ();
146 if (event_obj ==
nullptr)
173 gdbpy_ref <connection_object> conn_obj = conn_obj_iter->second;
174 conn_obj->target =
nullptr;
193 gdb_assert (conn_obj->
target ==
nullptr);
195 Py_TYPE (obj)->tp_free (obj);
206 if (target ==
nullptr)
207 return PyUnicode_FromFormat (
"<%s (invalid)>", Py_TYPE (obj)->tp_name);
209 return PyUnicode_FromFormat (
"<%s num=%d, what=\"%s\">",
210 Py_TYPE (obj)->tp_name,
224 if (conn->
target ==
nullptr)
280 if (details !=
nullptr)
322 void sending (gdb::array_view<const char> &buf)
override
331 void received (gdb::array_view<const char> &buf)
override
333 if (buf.size () > 0 && buf.data ()[0] !=
'\0')
334 m_result.reset (PyBytes_FromStringAndSize (buf.data (), buf.size ()));
380 static const char *keywords[] = {
"packet",
nullptr};
388 if (PyUnicode_Check (packet_obj))
392 packet_obj = PyUnicode_AsASCIIString (packet_obj);
393 if (packet_obj ==
nullptr)
398 if (!PyBytes_Check (packet_obj))
400 PyErr_SetString (PyExc_TypeError, _(
"Packet is not a bytes object"));
404 Py_ssize_t packet_len = 0;
405 char *packet_str_nonconst =
nullptr;
406 if (PyBytes_AsStringAndSize (packet_obj, &packet_str_nonconst,
409 const char *packet_str = packet_str_nonconst;
410 gdb_assert (packet_str !=
nullptr);
414 PyErr_SetString (PyExc_ValueError, _(
"Packet must not be empty"));
423 gdb::array_view<const char> view (packet_str, packet_len);
430 gdb_assert ((result ==
nullptr) == (PyErr_Occurred () !=
nullptr));
433 catch (
const gdb_exception &except)
457 "is_valid () -> Boolean.\n\
458Return true if this TargetConnection is valid, false if not." },
467 METH_VARARGS | METH_KEYWORDS,
468 "send_packet (PACKET) -> Bytes\n\
469Send PACKET to a remote target, return the reply as a bytes array." },
478 "ID number of this connection, as assigned by GDB.", NULL },
480 "A short string that is the name for this connection type.", NULL },
482 "A longer string describing this connection type.", NULL },
484 "A string containing additional connection details.", NULL },
492 PyVarObject_HEAD_INIT (NULL, 0)
493 "gdb.TargetConnection",
511 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
512 "GDB target connection object",
535 PyVarObject_HEAD_INIT (NULL, 0)
536 "gdb.RemoteTargetConnection",
555 "GDB remote target connection object",
virtual const char * connection_string()
observable< process_stratum_target * > connection_removed
std::set< process_stratum_target * > all_non_exited_process_targets()
void switch_to_target_no_thread(process_stratum_target *target)
#define CONNPY_REQUIRE_VALID(connection)
static PyMethodDef connection_object_methods[]
static PyObject * connpy_repr(PyObject *obj)
static PyObject * connpy_get_connection_num(PyObject *self, void *closure)
static void connpy_connection_dealloc(PyObject *obj)
static gdb_PyGetSetDef connection_object_getset[]
PyTypeObject connection_object_type
static void connpy_connection_removed(process_stratum_target *target)
static PyObject * connpy_get_description(PyObject *self, void *closure)
static std::map< process_stratum_target *, gdbpy_ref< connection_object > > all_connection_objects
static PyObject * connpy_get_connection_type(PyObject *self, void *closure)
void _initialize_py_connection()
gdbpy_ref target_to_connection_object(process_stratum_target *target)
static int emit_connection_event(process_stratum_target *target, eventregistry_object *registry)
static PyObject * connpy_is_valid(PyObject *self, PyObject *args)
static PyObject * connpy_send_packet(PyObject *self, PyObject *args, PyObject *kw)
static PyObject * connpy_get_connection_details(PyObject *self, void *closure)
static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION gdbpy_initialize_connection(void)
PyTypeObject remote_connection_object_type
static PyMethodDef remote_connection_object_methods[]
PyObject * gdbpy_connections(PyObject *self, PyObject *args)
gdbpy_ref create_event_object(PyTypeObject *py_type)
int evpy_add_attribute(PyObject *event, const char *name, PyObject *attr)
int evpy_emit_event(PyObject *event, eventregistry_object *registry)
events_object gdb_py_events
bool evregpy_no_listeners_p(eventregistry_object *registry)
gdb::ref_ptr< T, gdbpy_ref_policy< T > > gdbpy_ref
gdbpy_ref host_string_to_python_string(const char *str)
gdbpy_ref gdb_py_object_from_longest(LONGEST l)
void gdbpy_convert_exception(const struct gdb_exception &exception)
int gdb_pymodule_addobject(PyObject *module, const char *name, PyObject *object)
void gdbpy_print_stack(void)
int gdb_python_initialized
#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
#define GDBPY_INITIALIZE_FILE(INIT,...)
static int gdb_PyArg_ParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, const char **keywords,...)
bool is_remote_target(process_stratum_target *target)
void send_remote_packet(gdb::array_view< const char > &buf, send_remote_packet_callbacks *callbacks)
PyObject_HEAD struct process_stratum_target * target
void received(gdb::array_view< const char > &buf) override
void sending(gdb::array_view< const char > &buf) override
py_send_packet_callbacks()
const char * longname() const
const char * shortname() const
std::string make_target_connection_string(process_stratum_target *t)