예제 #1
0
void AB_Banking_ActivateAllProviders(AB_BANKING *ab) {
    GWEN_PLUGIN_DESCRIPTION_LIST2 *descrs;
    GWEN_PLUGIN_MANAGER *pm;

    pm=GWEN_PluginManager_FindPluginManager("provider");
    if (!pm) {
        DBG_ERROR(AQBANKING_LOGDOMAIN,
                  "Could not find plugin manager for \"%s\"",
                  "provider");
        return;
    }

    descrs=GWEN_PluginManager_GetPluginDescrs(pm);
    if (descrs) {
        GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *it;
        GWEN_PLUGIN_DESCRIPTION *pd;

        it=GWEN_PluginDescription_List2_First(descrs);
        assert(it);
        pd=GWEN_PluginDescription_List2Iterator_Data(it);
        assert(pd);
        while(pd) {
            const char *pname=GWEN_PluginDescription_GetName(pd);
            AB_PROVIDER *pro;

            pro=AB_Banking_GetProvider(ab, pname);
            if (!pro) {
                DBG_WARN(AQBANKING_LOGDOMAIN,
                         "Could not load backend \"%s\", ignoring", pname);
            }
            else {
                GWEN_StringList_AppendString(ab->activeProviders, pname, 0, 1);
            }

            pd=GWEN_PluginDescription_List2Iterator_Next(it);
        } /* while */
        GWEN_PluginDescription_List2Iterator_free(it);
        GWEN_PluginDescription_List2_freeAll(descrs);
    }
}
예제 #2
0
파일: ctplugin.c 프로젝트: cstim/gwenhywfar
GWEN_PLUGIN_DESCRIPTION_LIST2 *GWEN_Crypt_Token_PluginManager_GetPluginDescrs(GWEN_PLUGIN_MANAGER *pm,
                                                                              GWEN_CRYPT_TOKEN_DEVICE devt)
{
  GWEN_PLUGIN_DESCRIPTION_LIST2 *pl1;

  pl1=GWEN_PluginManager_GetPluginDescrs(pm);
  if (pl1) {
    GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *pit;
    GWEN_PLUGIN_DESCRIPTION_LIST2 *pl2;

    pl2=GWEN_PluginDescription_List2_new();
    pit=GWEN_PluginDescription_List2_First(pl1);
    if (pit) {
      GWEN_PLUGIN_DESCRIPTION *pd;
      const char *ts;

      if (devt==GWEN_Crypt_Token_Device_Any)
        ts=NULL;
      else
        ts=GWEN_Crypt_Token_Device_toString(devt);
      pd=GWEN_PluginDescription_List2Iterator_Data(pit);
      while (pd) {
        GWEN_XMLNODE *node;
        const char *nts;
        int match=0;

        node=GWEN_PluginDescription_GetXmlNode(pd);
        assert(node);
        nts=GWEN_XMLNode_GetProperty(node, "device", 0);
        if (nts) {
          if (!ts || (ts && strcasecmp(ts, nts)==0))
            match=1;
        }
        else if (!ts)
          match=1;

        if (match) {
          GWEN_PLUGIN_DESCRIPTION *pd2;

          pd2=GWEN_PluginDescription_dup(pd);
          GWEN_PluginDescription_List2_PushBack(pl2, pd2);
        }

        pd=GWEN_PluginDescription_List2Iterator_Next(pit);
      }
      GWEN_PluginDescription_List2Iterator_free(pit);
    }
    GWEN_PluginDescription_List2_freeAll(pl1);

    if (GWEN_PluginDescription_List2_GetSize(pl2)==0) {
      GWEN_PluginDescription_List2_freeAll(pl2);
      DBG_ERROR(GWEN_LOGDOMAIN,
                "No matching plugin descriptions for the given device type");
      return NULL;
    }
    return pl2;
  }
  else {
    DBG_ERROR(GWEN_LOGDOMAIN, "No plugin descriptions at all");
  }
  return NULL;
}