root/source4/lib/com/pycom.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. py_get_class_object
  2. initcom

   1 /* 
   2    Unix SMB/CIFS implementation.
   3    Python bindings for COM library.
   4    Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008
   5    
   6    This program is free software; you can redistribute it and/or modify
   7    it under the terms of the GNU General Public License as published by
   8    the Free Software Foundation; either version 3 of the License, or
   9    (at your option) any later version.
  10    
  11    This program is distributed in the hope that it will be useful,
  12    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14    GNU General Public License for more details.
  15    
  16    You should have received a copy of the GNU General Public License
  17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18 */
  19 
  20 #include "includes.h"
  21 #include <Python.h>
  22 #include "lib/com/com.h"
  23 #include "librpc/ndr/libndr.h"
  24 #include "libcli/util/pyerrors.h"
  25 
  26 #ifndef Py_RETURN_NONE
  27 #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
  28 #endif
  29 
  30 static struct com_context *py_com_ctx = NULL; /* FIXME: evil global */
  31 
  32 static PyObject *py_get_class_object(PyObject *self, PyObject *args)
     /* [<][>][^][v][top][bottom][index][help] */
  33 {
  34         char *s_clsid, *s_iid;
  35         struct GUID clsid, iid;
  36         struct IUnknown *object;
  37         NTSTATUS status;
  38         WERROR error;
  39 
  40         if (!PyArg_ParseTuple(args, "ss", &s_clsid, &s_iid))
  41                 return NULL;
  42 
  43         status = GUID_from_string(s_clsid, &clsid);
  44         if (!NT_STATUS_IS_OK(status)) {
  45                 PyErr_FromNTSTATUS(status);
  46                 return NULL;
  47         }
  48 
  49         status = GUID_from_string(s_iid, &iid);
  50         if (!NT_STATUS_IS_OK(status)) {
  51                 PyErr_FromNTSTATUS(status);
  52                 return NULL;
  53         }
  54 
  55         error = com_get_class_object(py_com_ctx, &clsid, &iid, &object);
  56         if (!W_ERROR_IS_OK(error)) {
  57                 PyErr_FromWERROR(error);
  58                 return NULL;
  59         }
  60         
  61         /* FIXME: Magic, integrate with stubs generated by pidl. */
  62 
  63         Py_RETURN_NONE;
  64 }
  65 
  66 static struct PyMethodDef com_methods[] = {
  67         { "get_class_object", (PyCFunction)py_get_class_object, METH_VARARGS, "S.get_class_object(clsid, iid) -> instance" },
  68         { NULL },
  69 };
  70 
  71 void initcom(void)
     /* [<][>][^][v][top][bottom][index][help] */
  72 {
  73         PyObject *m;
  74         WERROR error;
  75 
  76         error = com_init_ctx(&py_com_ctx, NULL);
  77         if (!W_ERROR_IS_OK(error)) {
  78                 PyErr_FromWERROR(error);
  79                 return;
  80         }
  81 
  82         m = Py_InitModule3("com", com_methods, "Simple COM implementation");
  83         if (m == NULL)
  84                 return;
  85 }

/* [<][>][^][v][top][bottom][index][help] */