static PyObject * session_channel(SSH2_SessionObj *self) { LIBSSH2_CHANNEL *channel; Py_BEGIN_ALLOW_THREADS channel = libssh2_channel_open_session(self->session); Py_END_ALLOW_THREADS CHECK_RETURN_POINTER(channel, self) return (PyObject *)SSH2_Channel_New(channel, self); }
static PyObject * listener_accept(SSH2_ListenerObj *self) { LIBSSH2_CHANNEL *channel; Py_BEGIN_ALLOW_THREADS channel = libssh2_channel_forward_accept(self->listener); Py_END_ALLOW_THREADS CHECK_RETURN_POINTER(channel, self->session) return (PyObject *)SSH2_Channel_New(channel, self->session); }
static void x11_callback(LIBSSH2_SESSION *session, LIBSSH2_CHANNEL *channel, const char *host, int port, void **abstract) { SSH2_SessionObj *session_obj = (SSH2_SessionObj *) *abstract; SSH2_ChannelObj *channel_obj = SSH2_Channel_New(channel, session_obj); PyObject *rv; PyGILState_STATE gstate = PyGILState_Ensure(); rv = PyObject_CallFunction(session_obj->cb_x11, "Osi", channel_obj, host, port); if (rv == NULL) PyErr_WriteUnraisable(session_obj->cb_x11); else Py_DECREF(rv); Py_DECREF(channel_obj); PyGILState_Release(gstate); }
static PyObject * session_scp_recv(SSH2_SessionObj *self, PyObject *args) { char *path; LIBSSH2_CHANNEL *channel; if (!PyArg_ParseTuple(args, "s:scp_recv", &path)) return NULL; Py_BEGIN_ALLOW_THREADS channel = libssh2_scp_recv(self->session, path, NULL); // &sb Py_END_ALLOW_THREADS CHECK_RETURN_POINTER(channel, self) return (PyObject *)SSH2_Channel_New(channel, self); }
static PyObject * session_direct_tcpip(SSH2_SessionObj *self, PyObject *args) { char *host; char *shost = "127.0.0.1"; int port; int sport = 22; LIBSSH2_CHANNEL *channel; if (!PyArg_ParseTuple(args, "si|si:direct_tcpip", &host, &port, &shost, &sport)) return NULL; Py_BEGIN_ALLOW_THREADS channel = libssh2_channel_direct_tcpip_ex(self->session, host, port, shost, sport); Py_END_ALLOW_THREADS CHECK_RETURN_POINTER(channel, self) return (PyObject *)SSH2_Channel_New(channel, self); }
static PyObject * session_scp_send(SSH2_SessionObj *self, PyObject *args) { char *path; int mode; unsigned long filesize; long mtime = 0; long atime = 0; LIBSSH2_CHANNEL *channel; if (!PyArg_ParseTuple(args, "sik|ll:scp_send", &path, &mode, &filesize, &mtime, &atime)) return NULL; Py_BEGIN_ALLOW_THREADS channel = libssh2_scp_send_ex(self->session, path, mode, filesize, mtime, atime); Py_END_ALLOW_THREADS CHECK_RETURN_POINTER(channel, self) return (PyObject *)SSH2_Channel_New(channel, self); }
static PyObject * session_scp_recv(SSH2_SessionObj *self, PyObject *args, PyObject *kwds) { char *path; LIBSSH2_CHANNEL *channel; struct stat sb; PyObject* get_stat = NULL; int get_stat_is_true = 0; PyObject* chan; static char *kwlist[] = {"path", "get_stat", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|O:scp_recv", kwlist, &path, &get_stat)) return NULL; if (get_stat && (get_stat_is_true = PyObject_IsTrue(get_stat)) < 0) return NULL; Py_BEGIN_ALLOW_THREADS channel = libssh2_scp_recv(self->session, path, get_stat_is_true ? &sb : 0); Py_END_ALLOW_THREADS CHECK_RETURN_POINTER(channel, self) /* Return a tuple of the channel and (size, mode, mtime, atime) * of the remote file if the get_stat argument is true else return * a tuple of the channel and None. */ chan = (PyObject *)SSH2_Channel_New(channel, self); if (!get_stat_is_true) return Py_BuildValue("(OO)", chan, Py_None); return Py_BuildValue("(O(LlLL))", chan, (PY_LONG_LONG)sb.st_size, (long)sb.st_mode, (PY_LONG_LONG)sb.st_mtime, (PY_LONG_LONG)sb.st_atime); }