Browse Source

LIB-11: adapter_group.cc - add some impl

LIB-11
heck 4 years ago
parent
commit
02d7ec1387
  1. 129
      src/adapter_group.cc

129
src/adapter_group.cc

@ -3,15 +3,32 @@
#include <pEp/group.h> #include <pEp/group.h>
#include "adapter_group.h" #include "adapter_group.h"
#include "grp_update_interface.hh"
#include "grp_query_interface.hh"
#include "grp_update_drv_engine.hh"
#include "grp_update_drv_dummy.hh"
#include "grp_query_drv_dummy.hh"
#include "pEpLog.hh" #include "pEpLog.hh"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
using namespace std;
using namespace pEp;
//Listmanager config
string lm_dummy_db_path = "listman_dummy.db";
/************************************************************************************************* /*************************************************************************************************
* Group management functions * Group management functions
*************************************************************************************************/ *************************************************************************************************/
// Engine Driver
GroupUpdateDriverEngine group_update_driver_engine{};
GroupUpdateInterface *gu_engine = &group_update_driver_engine;
// Listmanager Driver
GroupUpdateDriverDummy group_update_driver_dummy{lm_dummy_db_path};
GroupUpdateInterface *gu_listman = &group_update_driver_dummy;
DYNAMIC_API PEP_STATUS adapter_group_create( DYNAMIC_API PEP_STATUS adapter_group_create(
PEP_SESSION session, PEP_SESSION session,
@ -21,21 +38,78 @@ DYNAMIC_API PEP_STATUS adapter_group_create(
pEp_group **group) pEp_group **group)
{ {
pEpLog("called"); pEpLog("called");
return ::group_create(session, group_identity, manager, memberlist, group);
// Do listmanager
PEP_STATUS status = gu_listman->adapter_group_create(
session,
group_identity,
manager,
memberlist,
group);
if (status != PEP_STATUS_OK) {
return status;
}
// Do engine
status = gu_engine->adapter_group_create(session, group_identity, manager, memberlist, group);
if (status != PEP_STATUS_OK) {
// Rollback listman
PEP_STATUS rb_stat = gu_listman->adapter_group_dissolve(session, group_identity, manager);
if (rb_stat != PEP_STATUS_OK) {
//FATAL ERROR ON ROLLBACK
status = (PEP_STATUS)-9999;
}
}
return status;
} }
DYNAMIC_API PEP_STATUS DYNAMIC_API PEP_STATUS
adapter_group_join(PEP_SESSION session, pEp_identity *group_identity, pEp_identity *as_member) adapter_group_join(PEP_SESSION session, pEp_identity *group_identity, pEp_identity *as_member)
{ {
pEpLog("called"); pEpLog("called");
return ::group_join(session, group_identity, as_member); // Do listmanager
PEP_STATUS status = gu_listman->adapter_group_join(session, group_identity, as_member);
if (status != PEP_STATUS_OK) {
return status;
}
// Do engine
status = gu_engine->adapter_group_join(session, group_identity, as_member);
if (status != PEP_STATUS_OK) {
// Rollback listman
//TODO: ????
// PEP_STATUS rb_stat = gu_listman->adapter_group_dissolve(session, group_identity, manager);
// if (rb_stat != PEP_STATUS_OK) {
// //FATAL ERROR ON ROLLBACK
// status = (PEP_STATUS)-9999;
// }
}
return status;
} }
DYNAMIC_API PEP_STATUS DYNAMIC_API PEP_STATUS
adapter_group_dissolve(PEP_SESSION session, pEp_identity *group_identity, pEp_identity *manager) adapter_group_dissolve(PEP_SESSION session, pEp_identity *group_identity, pEp_identity *manager)
{ {
pEpLog("called"); pEpLog("called");
return ::group_dissolve(session, group_identity, manager); // Do listmanager
PEP_STATUS status = gu_listman->adapter_group_dissolve(session, group_identity, manager);
if (status != PEP_STATUS_OK) {
return status;
}
// Do engine
status = gu_engine->adapter_group_dissolve(session, group_identity, manager);
if (status != PEP_STATUS_OK) {
// Rollback listman
// TODO: ????
// PEP_STATUS rb_stat = gu_listman->adapter_group_dissolve(session, group_identity, manager);
// if (rb_stat != PEP_STATUS_OK) {
// //FATAL ERROR ON ROLLBACK
// status = (PEP_STATUS)-9999;
// }
}
return status;
} }
DYNAMIC_API PEP_STATUS adapter_group_invite_member( DYNAMIC_API PEP_STATUS adapter_group_invite_member(
@ -44,7 +118,23 @@ DYNAMIC_API PEP_STATUS adapter_group_invite_member(
pEp_identity *group_member) pEp_identity *group_member)
{ {
pEpLog("called"); pEpLog("called");
return ::group_invite_member(session, group_identity, group_member); // Do listmanager
PEP_STATUS status = gu_listman->adapter_group_invite_member(session, group_identity, group_member);
if (status != PEP_STATUS_OK) {
return status;
}
// Do engine
status = gu_engine->adapter_group_invite_member(session, group_identity, group_member);
if (status != PEP_STATUS_OK) {
// Rollback
PEP_STATUS rb_stat = gu_listman->adapter_group_remove_member(session, group_member, group_member);
if (rb_stat != PEP_STATUS_OK) {
//FATAL ERROR ON ROLLBACK
status = (PEP_STATUS)-9999;
}
}
return status;
} }
PEP_STATUS adapter_group_remove_member( PEP_STATUS adapter_group_remove_member(
@ -53,32 +143,53 @@ PEP_STATUS adapter_group_remove_member(
pEp_identity *group_member) pEp_identity *group_member)
{ {
pEpLog("called"); pEpLog("called");
return ::group_remove_member(session, group_identity, group_member); // Do listmanager
} PEP_STATUS status = gu_listman->adapter_group_remove_member(session, group_identity, group_member);
if (status != PEP_STATUS_OK) {
return status;
}
// Do engine
status = gu_engine->adapter_group_remove_member(session, group_identity, group_member);
if (status != PEP_STATUS_OK) {
// Rollback
PEP_STATUS rb_stat = gu_listman->adapter_group_invite_member(
session,
group_identity,
group_member);
if (rb_stat != PEP_STATUS_OK) {
//FATAL ERROR ON ROLLBACK
status = (PEP_STATUS)-9999;
}
}
return status;
}
/************************************************************************************************* /*************************************************************************************************
* Group query functions * Group query functions
*************************************************************************************************/ *************************************************************************************************/
// Listmanager Driver
GroupQueryDriverDummy group_query_driver_dummy{lm_dummy_db_path};
GroupQueryInterface *gq_listman = &group_query_driver_dummy;
DYNAMIC_API PEP_STATUS group_query_groups(PEP_SESSION session, identity_list **groups) DYNAMIC_API PEP_STATUS group_query_groups(PEP_SESSION session, identity_list **groups)
{ {
pEpLog("called"); pEpLog("called");
return PEP_STATUS_OK; return gq_listman->group_query_groups(session, groups);
} }
DYNAMIC_API PEP_STATUS DYNAMIC_API PEP_STATUS
group_query_manager(PEP_SESSION session, const pEp_identity *const group, pEp_identity **manager) group_query_manager(PEP_SESSION session, const pEp_identity *const group, pEp_identity **manager)
{ {
pEpLog("called"); pEpLog("called");
return PEP_STATUS_OK; return gq_listman->group_query_manager(session, group, manager);
} }
DYNAMIC_API PEP_STATUS DYNAMIC_API PEP_STATUS
group_query_members(PEP_SESSION session, const pEp_identity *const group, identity_list **members) group_query_members(PEP_SESSION session, const pEp_identity *const group, identity_list **members)
{ {
pEpLog("called"); pEpLog("called");
return PEP_STATUS_OK; return gq_listman->group_query_members(session, group, members);
} }
#ifdef __cplusplus #ifdef __cplusplus

Loading…
Cancel
Save