There were two service list in Search.cpp and SearchProvider.cpp.
discarded one of the list.
Change-Id: I85eee854889ea688d67087140b63a6dd8f8433ee
Signed-off-by: Sang gun Lee <sanggun7.lee@samsung.com>
void processReceivedMsg(char *, int);
static SearchProvider create();
static SearchProvider create(Search *);
- void json_parse(const char *in);
+ bool json_parse(const char *in, int length);
static void foreach_json_object(JsonObject *object, const gchar *key, JsonNode *node, gpointer user_data);
};
virtual void onLost(Service);
};
-class Search:public SearchListener
+class Search
{
private :
static int SERVICE_CHECK_TIMEOUT;
static Search *instance;
list<SearchProvider> providers ;
list<SearchProvider> removedProviders ;
- static list<Service> services;
static int numRunning;
SearchListener *searchListener;
static int search_ref_count;
static bool stopping;
bool searching_now;
- static mDNSSearchProvider provider1;
- static MSFDSearchProvider provider2;
+ static mDNSSearchProvider provider_mdns;
+ static MSFDSearchProvider provider_msfd;
public:
+ static list<Service> services;
static bool pt_update_start;
static pthread_t threads[NUM_OF_THREADS];
static int onStartNotified;
bool stop();
static list<Search*> search_list;
- void onStart();
- void onStop();
- void onFound(Service);
- void onLost(Service);
- static void st_onStart();
- static void st_onStop();
- static void st_onFound(Service);
- static void st_onLost(Service);
-
- bool isEqualto(SearchProvider, SearchProvider);
- list<Service> getServices();
- bool remove(list<SearchProvider> *, SearchProvider);
- void addProvider(SearchProvider);
- //bool removeProvider(SearchProvider);
- //void processRemovedProviders();
- //void removeAllProviders();
+ static void onStart();
+ static void onStop();
+ static void onFound(Service);
+ static void onLost(Service);
+
+ static list<Service> getServices();
void startDiscovery();
void stopDiscovery();
static bool addService(Service);
static bool removeService(Service);
- void removeAndNotify(Service);
+ static void removeServiceAndNotify(Service);
void validateService(Service);
Service getServiceById(string id);
{
private:
Search *searchListener;
- static list<Service> services;
+ //static list<Service> services;
public:
SearchProvider();
virtual ~SearchProvider(){}
virtual void start() {}
virtual bool stop() { return true; }
- static list<Service> getServices();
+ //static list<Service> getServices();
bool isSearching();
- void setSearchListener(Search *obj);
std::string getIP(std::string url);
- void addService(Service service);
void push_in_alivemap(long ttl, string id , int service_type);
void updateAlive(long ttl, string id , int service_type);
static void reapServices();
protected:
bool searching;
void setServices(list<Service>);
- static void removeService(Service service);
- static void removeServiceAndNotify(Service service);
void clearServices();
Service getServiceById(string id);
static Service getServiceByIp(string ip);
}
}
- n = lws_service(Context, -1);
+ n = lws_service(Context, 1500);
if (n < 0)
break;
#include "Error.h"
#include "Result.h"
#include "Channel.h"
+#include "Search.h"
#define MSGBUFSIZE 1000
#define MULTICAST_PORT 8001
#define MULTICAST_GROUP "224.0.0.7"
string ip_id;
int provider_type;
- void onSuccess(Service abc)
+ void onSuccess(Service svc)
{
MSF_DBG("MSFD Service Callback onSucces()");
MSFDSearchProvider_pointer->push_in_alivemap(ttl, ip_id, provider_type);
- MSFDSearchProvider_pointer->addService(abc);
+ Search::addService(svc);
}
void onError(Error)
if (buf == NULL)
return;
- json_parse(buf);
+ if (buflen < 10) {
+ return;
+ }
+
+ MSF_DBG("buf = %s", buf);
+
+ if (!json_parse(buf, buflen)) {
+ return;
+ }
string ip;
int port = 0;
Service serv = getServiceById(id);
if (serv.getId().length() != 0) {
- removeServiceAndNotify(serv);
+ Search::removeServiceAndNotify(serv);
}
}
}
}
}
-void MSFDSearchProvider::json_parse(const char *in)
+bool MSFDSearchProvider::json_parse(const char *in, int length)
{
JsonParser *parser = json_parser_new();
- if (json_parser_load_from_data(parser, in, -1, NULL)) {
- JsonNode *node = json_parser_get_root(parser);
+ if (json_parser_load_from_data(parser, in, length, NULL)) {
+ JsonNode *node = NULL;
+ node = json_parser_get_root(parser);
+
+ if (node == NULL) {
+ MSF_DBG("json_parsing error");
+ return false;
+ }
if (json_node_get_node_type(node) == JSON_NODE_OBJECT) {
json_object_foreach_member(json_node_get_object(node), foreach_json_object, this);
+ } else {
+ MSF_DBG("json_parsing error");
+ return false;
}
} else {
MSF_DBG("json_parsing error");
+ return false;
}
+
+ return true;
}
bool MSFDSearchProvider::stop()
int Search::SERVICE_CHECK_TIMEOUT = 5000;
bool Search::clearProviders;
pthread_t Search::threads[NUM_OF_THREADS];
-mDNSSearchProvider Search::provider1;
-MSFDSearchProvider Search::provider2;
+mDNSSearchProvider Search::provider_mdns;
+MSFDSearchProvider Search::provider_msfd;
Search *Search::instance = NULL;
bool Search::starting = false;
bool Search::stopping = false;
void Search::onStart()
{
- st_onStart();
-}
-
-void Search::onStop()
-{
- st_onStop();
-}
-
-void Search::onFound(Service service)
-{
- st_onFound(service);
-}
-
-void Search::onLost(Service service)
-{
- st_onLost(service);
-}
-
-void Search :: st_onStart()
-{
- MSF_DBG("Search::st_onStart()");
+ MSF_DBG("Search::onStart()");
// ....... ==0 ??
if (onStartNotified > 0) {
}
}
-void Search::st_onStop()
+void Search::onStop()
{
- MSF_DBG("Search::st_onStop()");
+ MSF_DBG("Search::onStop()");
list<Search*>::iterator itr;
for (itr = search_list.begin(); itr != search_list.end(); itr++) {
if ((*itr)->searchListener != NULL && (*itr)->searching_now) {
}
}
-void Search::st_onFound(Service service)
+void Search::onFound(Service service)
{
- MSF_DBG("Search::st_onFound()");
-
- addService(service);
+ MSF_DBG("Search::onFound()");
list<Search*>::iterator itr;
- MSF_DBG("Search::st_onFound() list size = %d", search_list.size());
+ MSF_DBG("Search::onFound() list size = %d", services.size());
for (itr = search_list.begin(); itr != search_list.end(); itr++) {
if ((*itr)->searchListener != NULL && (*itr)->searching_now) {
}
}
-void Search::st_onLost(Service service)
+void Search::onLost(Service service)
{
- MSF_DBG("Search::st_onLost()");
-
- removeService(service);
+ MSF_DBG("Search::onLost()");
list<Search*>::iterator itr;
list<Service> Search::getServices()
{
- return SearchProvider::getServices();
-}
-
-void Search::addProvider(SearchProvider provider)
-{
- providers.push_back(provider);
- provider.setSearchListener(this);
-}
-
-bool Search::isEqualto(SearchProvider s1, SearchProvider s2)
-{
- list<Service> services1 = s1.getServices();
- list<Service> services2 = s1.getServices();
- int len1 = services1.size();
- int len2 = services2.size();
- if (len1 == len2)
- return false;
-
- std::list<Service>::iterator iter1;
- std::list<Service>::iterator iter2;
- for(iter1 = services1.begin(); iter1 != services1.end(); ++iter1) {
- if (services2.size() != 0) {
- iter2 = services2.begin();
- while(iter2 != services2.end()) {
- if (((*iter2).getId()) == ((*iter1).getId())) {
- services2.erase(iter2++);
- break;
- } else {
- iter2++;
- }
- }
- }
- }
- if (services2.size() == 0)
- return true;
- else
- return false;
-}
-
-bool Search::remove(list<SearchProvider> *providers, SearchProvider provider)
-{
- std::list<SearchProvider>::iterator it = providers->begin();
- while(it != providers->end()) {
- bool match = isEqualto(*it, provider);
- if (match) {
- providers->erase(it);
- return true;
- }
- }
- return false;
+ //return SearchProvider::getServices();
+ return services;
}
void *Search::pt_startMDNS(void *arg)
void *Search::pt_startMSFD(void *arg)
{
- provider2.start();
+ provider_msfd.start();
return NULL;
}
int ret = -1;
- provider1.start();
+ provider_mdns.start();
ret = pthread_create(&threads[MSFD_THREAD_NUMBER], NULL, pt_startMSFD, NULL);
if (ret == -1)
MSF_DBG("Search::stopDiscovery()");
stopping = true;
bool stop = false;
- stop = provider1.stop();
- stop = provider2.stop();
+ stop = provider_mdns.stop();
+ stop = provider_msfd.stop();
pt_update_start = false;
if (stop)
break;
}
}
- if (!match)
+ if (!match) {
services.push_back(service);
+ onFound(service);
+ }
+
return true;
}
return true;
}
-void Search::removeAndNotify(Service service)
+void Search::removeServiceAndNotify(Service service)
{
- if (removeService(service)) {
- }
+ removeService(service);
+ onLost(service);
}
void Search::validateService(Service service)
#include "SearchProvider.h"
#include "Debug.h"
-list<Service> SearchProvider::services;
map<string, ttl_info> SearchProvider::aliveMap;
ttl_info::ttl_info(long ttl, int service_type):msfd_ttl(0), mdns_ttl(0)
{
long now = time(0);
+ MSF_DBG("msfd_remain_ttl = %d mdns_remain_ttl = %d", msfd_ttl - now, mdns_ttl - now);
+
if (msfd_ttl < now && mdns_ttl < now)
return true;
else
searching = false;
}
-list<Service> SearchProvider::getServices()
-{
- return services;
-}
+//list<Service> SearchProvider::getServices()
+//{
+// return services;
+//}
void SearchProvider::setServices(list<Service> listofservices)
{
if (listofservices.size() != 0) {
std::list<Service>::const_iterator iterator;
for (iterator = listofservices.begin(); iterator != listofservices.end(); ++iterator) {
- services.push_back(*iterator);
+ Search::services.push_back(*iterator);
}
}
}
-void SearchProvider::setSearchListener(Search *obj)
-{
- searchListener = obj;
-}
-
-void SearchProvider::addService(Service service)
-{
- bool found = false;
- std::list<Service>::iterator iterator;
-
- bool match = false;
-
- for (iterator = services.begin(); iterator != services.end(); ++iterator) {
- if (iterator->getId() == service.getId()) {
- match = true;
- break;
- }
- }
-
- if (!match) {
- services.push_back(service);
- found = true;
-
- if (found) {
- Search::st_onFound(service);
- }
- } else {
- }
-}
-
-void SearchProvider::removeService(Service service)
-{
- if (&service == NULL) {
- return;
- }
-
- std::list<Service>::iterator it = services.begin();
- while (it != services.end()) {
- if (((*it).getId()) == (service.getId())) {
- services.erase(it++);
- } else {
- it++;
- }
- }
-}
-
-void SearchProvider::removeServiceAndNotify(Service service)
-{
- removeService(service);
- Search::st_onLost(service);
-}
void SearchProvider::clearServices()
{
- services.clear();
+ Search::services.clear();
}
Service SearchProvider::getServiceById(string id)
{
std::list<Service>::iterator iterator;
- for (iterator = services.begin(); iterator != services.end(); ++iterator) {
+ for (iterator = Search::services.begin(); iterator != Search::services.end(); ++iterator) {
if (((*iterator).getId()) == id) {
return(*iterator);
}
Service SearchProvider::getServiceByIp(string ip)
{
std::list<Service>::iterator iterator;
- for (iterator = services.begin(); iterator != services.end(); ++iterator) {
+ for (iterator = Search::services.begin(); iterator != Search::services.end(); ++iterator) {
string url = (*iterator).getUri();
std::string::size_type pos = url.find(ip);
void SearchProvider::updateAlive(long ttl, string id, int service_type)
{
- MSF_DBG("updateAlive : ttl = %d, id = %s, service_type = %d", ttl, id.c_str(), service_type);
+ MSF_DBG("updateAlive : ttl = %d, id = %s, service_type = %s", ttl, id.c_str(), (service_type == 1)? "MSFD" : "MDNS");
if (id.empty()) {
+ MSF_DBG("updateAlive id is empty");
return;
}
Service service=getServiceByIp(it->first);
MSF_DBG("reapServices - Remove service : [%s]", service.getId().c_str());
aliveMap.erase(it->first);
- removeServiceAndNotify(service);
+ Search::removeServiceAndNotify(service);
}
}
}
* limitations under the License.
*/
-#include "mDNSSearchProvider.h"
#include <stdlib.h>
-#include "Debug.h"
#include <list>
#include "Error.h"
+#include "Debug.h"
+#include "mDNSSearchProvider.h"
+#include "Search.h"
#define SERVICE_TYPE "_samsungmsf._tcp"
return (SearchProvider)mDNSSearchProvider(searchListener);
}
-void mDNSSearchProvider::addService(Service service)
-{
- this->SearchProvider::addService(service);
-}
-
void mDNSSearchProvider::updateAlive(long ttl, string id, int service_type)
{
this->SearchProvider::updateAlive(ttl, id, service_type);
void MDNSServiceCallback::onSuccess(Service service)
{
MSF_DBG("\n [MSF : API] Debug log Function : [%s] and line [%d] in file [%s] \n",__FUNCTION__ ,__LINE__,__FILE__);
- provider->addService(service);
+ Search::addService(service);
string ip = provider->getIP(service.getUri());
provider->push_in_alivemap(0x00ffffff, ip, MDNS);
MSF_DBG("service : id( %s ) registerd.", ip.c_str());