+RESULT eDVBCIInterfaces::setDescrambleRules(int slotid, SWIG_PYOBJECT(ePyObject) obj )
+{
+ eDVBCISlot *slot = getSlot(slotid);
+ if (!slot)
+ {
+ char tmp[255];
+ snprintf(tmp, 255, "eDVBCIInterfaces::setDescrambleRules try to set rules for CI Slot %d... but just %d slots are available", slotid, m_slots.size());
+ PyErr_SetString(PyExc_StandardError, tmp);
+ return -1;
+ }
+ if (!PyTuple_Check(obj))
+ {
+ char tmp[255];
+ snprintf(tmp, 255, "2nd argument of setDescrambleRules is not a tuple.. it is a '%s'!!", PyObject_TypeStr(obj));
+ PyErr_SetString(PyExc_StandardError, tmp);
+ return -1;
+ }
+ if (PyTuple_Size(obj) != 3)
+ {
+ const char *errstr = "eDVBCIInterfaces::setDescrambleRules not enough entrys in argument tuple!!\n"
+ "first argument should be a pythonlist with possible services\n"
+ "second argument should be a pythonlist with possible providers\n"
+ "third argument should be a pythonlist with possible caids";
+ PyErr_SetString(PyExc_StandardError, errstr);
+ return -1;
+ }
+ ePyObject service_list = PyTuple_GET_ITEM(obj, 0);
+ ePyObject provider_list = PyTuple_GET_ITEM(obj, 1);
+ ePyObject caid_list = PyTuple_GET_ITEM(obj, 2);
+ if (!PyList_Check(service_list) || !PyList_Check(provider_list) || !PyList_Check(caid_list))
+ {
+ char errstr[512];
+ snprintf(errstr, 512, "eDVBCIInterfaces::setDescrambleRules incorrect data types in argument tuple!!\n"
+ "first argument(%s) should be a pythonlist with possible services (reference strings)\n"
+ "second argument(%s) should be a pythonlist with possible providers (providername strings)\n"
+ "third argument(%s) should be a pythonlist with possible caids (ints)",
+ PyObject_TypeStr(service_list), PyObject_TypeStr(provider_list), PyObject_TypeStr(caid_list));
+ PyErr_SetString(PyExc_StandardError, errstr);
+ return -1;
+ }
+ slot->possible_caids.clear();
+ slot->possible_services.clear();
+ slot->possible_providers.clear();
+ int size = PyList_Size(service_list);
+ while(size)
+ {
+ --size;
+ ePyObject refstr = PyList_GET_ITEM(service_list, size);
+ if (!PyString_Check(refstr))
+ {
+ char buf[255];
+ snprintf(buf, 255, "eDVBCIInterfaces::setDescrambleRules entry in service list is not a string.. it is '%s'!!", PyObject_TypeStr(refstr));
+ PyErr_SetString(PyExc_StandardError, buf);
+ return -1;
+ }
+ char *tmpstr = PyString_AS_STRING(refstr);
+ eServiceReference ref(tmpstr);
+ if (ref.valid())
+ slot->possible_services.insert(ref);
+ else
+ eDebug("eDVBCIInterfaces::setDescrambleRules '%s' is not a valid service reference... ignore!!", tmpstr);
+ };
+ size = PyList_Size(provider_list);
+ while(size)
+ {
+ --size;
+ ePyObject str = PyList_GET_ITEM(provider_list, size);
+ if (!PyString_Check(str))
+ {
+ char buf[255];
+ snprintf(buf, 255, "eDVBCIInterfaces::setDescrambleRules entry in provider list is not a string it is '%s'!!", PyObject_TypeStr(str));
+ PyErr_SetString(PyExc_StandardError, buf);
+ return -1;
+ }
+ char *tmpstr = PyString_AS_STRING(str);
+ if (strlen(tmpstr))
+ slot->possible_providers.insert(tmpstr);
+ else
+ eDebug("eDVBCIInterfaces::setDescrambleRules ignore invalid entry in provider name list!!");
+ };
+ size = PyList_Size(caid_list);
+ while(size)
+ {
+ --size;
+ ePyObject caid = PyList_GET_ITEM(caid_list, size);
+ if (!PyInt_Check(caid))
+ {
+ char buf[255];
+ snprintf(buf, 255, "eDVBCIInterfaces::setDescrambleRules entry in caid list is not a long it is '%s'!!", PyObject_TypeStr(caid));
+ PyErr_SetString(PyExc_StandardError, buf);
+ return -1;
+ }
+ int tmpcaid = PyInt_AsLong(caid);
+ if (tmpcaid > 0 && tmpcaid < 0x10000)
+ slot->possible_caids.insert(tmpcaid);
+ else
+ eDebug("eDVBCIInterfaces::setDescrambleRules %d is not a valid caid... ignore!!", tmpcaid);
+ };
+ return 0;
+}