234 lines
9.6 KiB
Plaintext
234 lines
9.6 KiB
Plaintext
$OpenBSD: patch-src_pysilc_c,v 1.3 2007/10/02 17:35:48 martynas Exp $
|
|
--- src/pysilc.c.orig Mon Jul 10 01:27:57 2006
|
|
+++ src/pysilc.c Sun Jul 1 22:52:11 2007
|
|
@@ -26,26 +26,28 @@ void initsilc() {
|
|
PY_MOD_ADD_CLASS(mod, SilcClient);
|
|
PY_MOD_ADD_CLASS(mod, SilcChannel);
|
|
PY_MOD_ADD_CLASS(mod, SilcUser);
|
|
+ PyModule_AddIntConstant(mod, "SILC_ID_CLIENT", SILC_ID_CLIENT);
|
|
+ PyModule_AddIntConstant(mod, "SILC_ID_CHANNEL", SILC_ID_CHANNEL);
|
|
+ PyModule_AddIntConstant(mod, "SILC_ID_SERVER", SILC_ID_SERVER);
|
|
}
|
|
|
|
static int PySilcClient_Init(PyObject *self, PyObject *args, PyObject *kwds)
|
|
{
|
|
PySilcClient *pyclient = (PySilcClient *)self;
|
|
+
|
|
+ pyclient->conncallback = _pysilc_client_connect_callback;
|
|
+
|
|
pyclient->callbacks.say = _pysilc_client_callback_say;
|
|
pyclient->callbacks.channel_message = _pysilc_client_callback_channel_message;
|
|
pyclient->callbacks.private_message = _pysilc_client_callback_private_message;
|
|
pyclient->callbacks.notify = _pysilc_client_callback_notify;
|
|
pyclient->callbacks.command = _pysilc_client_callback_command;
|
|
pyclient->callbacks.command_reply = _pysilc_client_callback_command_reply;
|
|
- pyclient->callbacks.connected = _pysilc_client_callback_connected;
|
|
- pyclient->callbacks.disconnected = _pysilc_client_callback_disconnected;
|
|
pyclient->callbacks.get_auth_method = _pysilc_client_callback_get_auth_method;
|
|
pyclient->callbacks.verify_public_key = _pysilc_client_callback_verify_key;
|
|
pyclient->callbacks.ask_passphrase = _pysilc_client_callback_ask_passphrase;
|
|
- pyclient->callbacks.failure = _pysilc_client_callback_failure;
|
|
pyclient->callbacks.key_agreement = _pysilc_client_callback_key_agreement;
|
|
pyclient->callbacks.ftp = _pysilc_client_callback_ftp;
|
|
- pyclient->callbacks.detach = _pysilc_client_callback_detach;
|
|
|
|
char *nickname = NULL, *username = NULL, *realname = NULL, *hostname = NULL;
|
|
static char *kwlist[] = {"keys", "nickname", "username", "realname", "hostname", NULL};
|
|
@@ -67,9 +69,11 @@ static int PySilcClient_Init(PyObject *self, PyObject
|
|
return -1;
|
|
|
|
pyclient->silcconn = NULL;
|
|
-
|
|
+
|
|
+ memset(&(pyclient->params), 0, sizeof(pyclient->params));
|
|
+
|
|
if (nickname)
|
|
- pyclient->silcobj->nickname = strdup(nickname);
|
|
+ pyclient->params.nickname = strdup(nickname);
|
|
if (username)
|
|
pyclient->silcobj->username = strdup(username);
|
|
else
|
|
@@ -83,29 +87,22 @@ static int PySilcClient_Init(PyObject *self, PyObject
|
|
else
|
|
pyclient->silcobj->hostname = silc_net_localhost();
|
|
|
|
- pyclient->silcobj->pkcs = keys->pkcs;
|
|
- pyclient->silcobj->public_key = keys->public;
|
|
- pyclient->silcobj->private_key = keys->private;
|
|
-
|
|
pyclient->keys = keys;
|
|
Py_INCREF(keys);
|
|
|
|
- silc_client_init(pyclient->silcobj);
|
|
+ silc_client_init(pyclient->silcobj, pyclient->silcobj->username,
|
|
+ pyclient->silcobj->hostname,
|
|
+ pyclient->silcobj->realname, _pysilc_client_running,
|
|
+ pyclient->silcobj);
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
static void PySilcClient_Del(PyObject *obj)
|
|
{
|
|
- printf("SilcClient.__del__\n");
|
|
PySilcClient *pyclient = (PySilcClient *)obj;
|
|
if (pyclient->silcobj) {
|
|
- silc_client_stop(pyclient->silcobj);
|
|
- if (pyclient->silcobj->username)
|
|
- free(pyclient->silcobj->username);
|
|
- if (pyclient->silcobj->realname)
|
|
- free(pyclient->silcobj->realname);
|
|
- if (pyclient->silcobj->hostname)
|
|
- free(pyclient->silcobj->hostname);
|
|
+ silc_client_stop(pyclient->silcobj, NULL, NULL);
|
|
silc_client_free(pyclient->silcobj);
|
|
}
|
|
Py_XDECREF(pyclient->keys);
|
|
@@ -114,27 +111,30 @@ static void PySilcClient_Del(PyObject *obj)
|
|
|
|
static PyObject *pysilc_client_connect_to_server(PyObject *self, PyObject *args, PyObject *kwds)
|
|
{
|
|
- int result;
|
|
+ SilcAsyncOperation op;
|
|
unsigned int port = 706;
|
|
char *host;
|
|
static char *kwlist[] = {"host", "port", NULL};
|
|
PySilcClient *pyclient = (PySilcClient *)self;
|
|
-
|
|
+
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|I", kwlist, &host, &port))
|
|
return NULL;
|
|
-
|
|
+
|
|
if (!pyclient || !pyclient->silcobj) {
|
|
PyErr_SetString(PyExc_RuntimeError, "SILC Client Not Initialised");
|
|
return NULL;
|
|
}
|
|
-
|
|
- result = silc_client_connect_to_server(pyclient->silcobj, NULL, port, host, NULL);
|
|
- if (result != -1) {
|
|
+
|
|
+ op = silc_client_connect_to_server(pyclient->silcobj,
|
|
+ &(pyclient->params), pyclient->keys->public, pyclient->keys->private,
|
|
+ host, port, pyclient->conncallback, NULL);
|
|
+
|
|
+ if (!op) {
|
|
Py_INCREF(self);
|
|
- return PyInt_FromLong(result);
|
|
+ return PyInt_FromLong(-1);
|
|
}
|
|
-
|
|
- return PyInt_FromLong(result);
|
|
+
|
|
+ return PyInt_FromLong(0);
|
|
}
|
|
|
|
static PyObject *pysilc_client_run_one(PyObject *self)
|
|
@@ -184,12 +184,11 @@ static PyObject *pysilc_client_send_channel_message(Py
|
|
PyObject *private_key = NULL; // TODO: ignored at the moment
|
|
unsigned int defaultFlags = SILC_MESSAGE_FLAG_UTF8;
|
|
unsigned int flags = 0;
|
|
- bool force_send = 1;
|
|
PySilcClient *pyclient = (PySilcClient *)self;
|
|
|
|
- static char *kwlist[] = {"channel", "msg", "private_key", "flags", "force_send", NULL};
|
|
+ static char *kwlist[] = {"channel", "msg", "private_key", "flags", NULL};
|
|
|
|
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oes#|OIb", kwlist, &channel, "utf-8", &message, &length, &private_key, &flags, &force_send))
|
|
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oes#|OI", kwlist, &channel, "utf-8", &message, &length, &private_key, &flags))
|
|
return NULL;
|
|
|
|
if (!PyObject_IsInstance((PyObject *)channel, (PyObject *)&PySilcChannel_Type))
|
|
@@ -205,8 +204,8 @@ static PyObject *pysilc_client_send_channel_message(Py
|
|
channel->silcobj,
|
|
NULL,
|
|
flags | defaultFlags,
|
|
- message, length,
|
|
- force_send);
|
|
+ NULL,
|
|
+ message, length);
|
|
|
|
return PyInt_FromLong(result);
|
|
}
|
|
@@ -220,13 +219,12 @@ static PyObject *pysilc_client_send_private_message(Py
|
|
int result = 0;
|
|
unsigned int defaultFlags = SILC_MESSAGE_FLAG_UTF8;
|
|
unsigned int flags = 0;
|
|
- bool force_send = 1;
|
|
PySilcClient *pyclient = (PySilcClient *)self;
|
|
|
|
|
|
- static char *kwlist[] = {"user", "message", "flags", "force_send", NULL};
|
|
+ static char *kwlist[] = {"user", "message", "flags", NULL};
|
|
|
|
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oes#|Ib", kwlist, &user, "utf-8", &message, &length, &flags, &force_send))
|
|
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oes#|I", kwlist, &user, "utf-8", &message, &length, &flags))
|
|
return NULL;
|
|
|
|
if (!PyObject_IsInstance((PyObject *)user, (PyObject *)&PySilcUser_Type))
|
|
@@ -241,9 +239,9 @@ static PyObject *pysilc_client_send_private_message(Py
|
|
pyclient->silcconn,
|
|
user->silcobj,
|
|
flags | defaultFlags,
|
|
+ NULL,
|
|
message,
|
|
- length,
|
|
- force_send);
|
|
+ length);
|
|
|
|
return PyInt_FromLong(result);
|
|
}
|
|
@@ -307,7 +305,6 @@ static PyObject *pysilc_create_key_pair(PyObject *mod,
|
|
char *pub_identifier = NULL;
|
|
|
|
SilcUInt32 key_length = 2048;
|
|
- SilcPKCS pkcs;
|
|
SilcPublicKey public_key;
|
|
SilcPrivateKey private_key;
|
|
|
|
@@ -331,13 +328,13 @@ static PyObject *pysilc_create_key_pair(PyObject *mod,
|
|
|
|
bool result = silc_create_key_pair(pkcs_name, key_length, pub_filename,
|
|
prv_filename, pub_identifier, passphrase,
|
|
- &pkcs, &public_key, &private_key, 0);
|
|
+ &public_key, &private_key, 0);
|
|
if (!result) {
|
|
PyErr_SetString(PyExc_RuntimeError, "Unable to generate keys.");
|
|
return NULL;
|
|
}
|
|
|
|
- return PySilcKeys_New(pkcs, public_key, private_key);
|
|
+ return PySilcKeys_New(public_key, private_key);
|
|
}
|
|
|
|
static PyObject *pysilc_load_key_pair(PyObject *mod, PyObject *args, PyObject *kwds)
|
|
@@ -346,7 +343,6 @@ static PyObject *pysilc_load_key_pair(PyObject *mod, P
|
|
char *passphrase = NULL;
|
|
char *pub_filename , *prv_filename;
|
|
|
|
- SilcPKCS pkcs;
|
|
SilcPublicKey public_key;
|
|
SilcPrivateKey private_key;
|
|
|
|
@@ -368,15 +364,14 @@ static PyObject *pysilc_load_key_pair(PyObject *mod, P
|
|
}
|
|
|
|
// Use the passphrase passed.
|
|
- bool result = silc_load_key_pair(pub_filename, prv_filename,
|
|
- passphrase,
|
|
- &pkcs, &public_key, &private_key);
|
|
-
|
|
+ bool result = silc_load_key_pair(pub_filename, prv_filename,
|
|
+ passphrase, &public_key,
|
|
+ &private_key);
|
|
+
|
|
if (!result) {
|
|
PyErr_SetString(PyExc_RuntimeError, "Unable to load keys.");
|
|
return NULL;
|
|
}
|
|
|
|
- return PySilcKeys_New(pkcs, public_key, private_key);
|
|
+ return PySilcKeys_New(public_key, private_key);
|
|
}
|
|
-
|