Almost reverting changes in naming convention: moving "user" name to
front, but still keeping application name.  As part of an additional
change, shared folder name in actions is moved just after "action"
keyword

Making AddRemoteAction call exception-free

Change-Id: Ifd0a0c6256940eaf6df8081722ae9d7ed40b12e5
diff --git a/src/content-server.cc b/src/content-server.cc
index 2aa19ca..fa0ea4c 100644
--- a/src/content-server.cc
+++ b/src/content-server.cc
@@ -62,11 +62,7 @@
   ScopedLock lock (m_mutex);
   for (PrefixIt it = m_prefixes.begin(); it != m_prefixes.end(); ++it)
   {
-    Name filePrefix   = Name (*it)(m_appName)("file");
-    Name actionPrefix = Name (*it)(m_appName)(m_sharedFolderName)("action");
-
-    m_ccnx->clearInterestFilter(filePrefix);
-    m_ccnx->clearInterestFilter(actionPrefix);
+    m_ccnx->clearInterestFilter (*it);
   }
 
   m_prefixes.clear ();
@@ -75,17 +71,11 @@
 void
 ContentServer::registerPrefix(const Name &forwardingHint)
 {
-  // Format for files:   /<forwarding-hint>/<appname>/file/<hash>/<device_name>/<segment>
-  // Format for actions: /<forwarding-hint>/<appname>/<shared-folder>/action/<device_name>/<action-seq>
+  // Format for files:   /<forwarding-hint>/<device_name>/<appname>/file/<hash>/<segment>
+  // Format for actions: /<forwarding-hint>/<device_name>/<appname>/action/<shared-folder>/<action-seq>
 
-  Name filePrefix   = Name (forwardingHint)(m_appName)("file");
-  Name actionPrefix = Name (forwardingHint)(m_appName)(m_sharedFolderName)("action");
-
-  m_ccnx->setInterestFilter (filePrefix,   bind(&ContentServer::serve_File,   this, forwardingHint, filePrefix,   _1));
-  m_ccnx->setInterestFilter (actionPrefix, bind(&ContentServer::serve_Action, this, forwardingHint, actionPrefix, _1));
-
-  _LOG_DEBUG (">> content server: register FILE   " << filePrefix);
-  _LOG_DEBUG (">> content server: register ACTION " << actionPrefix);
+  _LOG_DEBUG (">> content server: register " << forwardingHint);
+  m_ccnx->setInterestFilter (forwardingHint, bind(&ContentServer::filterAndServe, this, forwardingHint, _1));
 
   ScopedLock lock (m_mutex);
   m_prefixes.insert(forwardingHint);
@@ -94,70 +84,66 @@
 void
 ContentServer::deregisterPrefix (const Name &forwardingHint)
 {
-  Name filePrefix   = Name (forwardingHint)(m_appName)("file");
-  Name actionPrefix = Name (forwardingHint)(m_appName)(m_sharedFolderName)("action");
-
-  m_ccnx->clearInterestFilter(filePrefix);
-  m_ccnx->clearInterestFilter(actionPrefix);
-
-  _LOG_DEBUG ("<< content server: deregister FILE   " << filePrefix);
-  _LOG_DEBUG ("<< content server: deregister ACTION " << actionPrefix);
+  _LOG_DEBUG ("<< content server: deregister " << forwardingHint);
+  m_ccnx->clearInterestFilter(forwardingHint);
 
   ScopedLock lock (m_mutex);
   m_prefixes.erase (forwardingHint);
 }
 
-// void
-// ContentServer::serve(Name forwardingHint, const Name &interest)
-// {
-//   // /forwardingHint/app-name/device-name/action/shared-folder/action-seq
-//   // /forwardingHint/app-name/device-name/file/file-hash/segment
+void
+ContentServer::filterAndServe (Name forwardingHint, const Name &interest)
+{
+  // Format for files:   /<forwarding-hint>/<device_name>/<appname>/file/<hash>/<segment>
+  // Format for actions: /<forwarding-hint>/<device_name>/<appname>/action/<shared-folder>/<action-seq>
 
-//   Name name = interest.getPartialName(forwardingHint.size());
-//   if (name.size() > 3)
-//   {
-//     string type = name.getCompAsString(name.size() - 3);
-//     if (type == "action")
-//     {
-//       serve_Action (forwardingHint, interest);
-//     }
-//     else if (type == "file")
-//     {
-//       serve_File (forwardingHint, interest);
-//     }
-//   }
-// }
+  Name name = interest.getPartialName (forwardingHint.size());
+  // name for files:   /<device_name>/<appname>/file/<hash>/<segment>
+  // name for actions: /<device_name>/<appname>/action/<shared-folder>/<action-seq>
+
+  if (name.size() >= 4 && name.getCompFromBackAsString (3) == m_appName)
+  {
+    string type = name.getCompFromBackAsString (2);
+    if (type == "file")
+      {
+        serve_File (forwardingHint, interest);
+      }
+    else if (type == "action")
+      {
+        serve_Action (forwardingHint, interest);
+      }
+  }
+}
 
 void
-ContentServer::serve_Action (Name forwardingHint, Name locatorPrefix, Name interest)
+ContentServer::serve_Action (Name forwardingHint, Name interest)
 {
-  _LOG_DEBUG (">> content server serving ACTION, hint: " << forwardingHint << ", locatorPrefix: " << locatorPrefix << ", interest: " << interest);
-  m_scheduler->scheduleOneTimeTask (m_scheduler, 0, bind (&ContentServer::serve_Action_Execute, this, forwardingHint, locatorPrefix, interest), boost::lexical_cast<string>(interest));
+  _LOG_DEBUG (">> content server serving ACTION, hint: " << forwardingHint << ", interest: " << interest);
+  m_scheduler->scheduleOneTimeTask (m_scheduler, 0, bind (&ContentServer::serve_Action_Execute, this, forwardingHint, interest), boost::lexical_cast<string>(interest));
   // need to unlock ccnx mutex... or at least don't lock it
 }
 
 void
-ContentServer::serve_File (Name forwardingHint, Name locatorPrefix, Name interest)
+ContentServer::serve_File (Name forwardingHint, Name interest)
 {
-  _LOG_DEBUG (">> content server serving FILE, hint: " << forwardingHint << ", locatorPrefix: " << locatorPrefix << ", interest: " << interest);
+  _LOG_DEBUG (">> content server serving FILE, hint: " << forwardingHint << ", interest: " << interest);
 
-  m_scheduler->scheduleOneTimeTask (m_scheduler, 0, bind (&ContentServer::serve_File_Execute, this, forwardingHint, locatorPrefix, interest), boost::lexical_cast<string>(interest));
+  m_scheduler->scheduleOneTimeTask (m_scheduler, 0, bind (&ContentServer::serve_File_Execute, this, forwardingHint, interest), boost::lexical_cast<string>(interest));
   // need to unlock ccnx mutex... or at least don't lock it
 }
 
 void
-ContentServer::serve_File_Execute (Name forwardingHint, Name locatorPrefix, Name interest)
+ContentServer::serve_File_Execute (Name forwardingHint, Name interest)
 {
   // forwardingHint: /<forwarding-hint>
-  // locatorPrefix:  /<forwarding-hint>/<appname>/file
-  // interest:       /<forwarding-hint>/<appname>/file/<hash>/<device_name>/<segment>
+  // interest:       /<forwarding-hint>/<device_name>/<appname>/file/<hash>/<segment>
 
-  Name pureInterest = interest.getPartialName (locatorPrefix.size ());
-  // pureInterest:   /<hash>/<device_name>/<segment>
+  Name name = interest.getPartialName (forwardingHint.size());
+  // name:           /<device_name>/<appname>/file/<hash>/<segment>
 
-  int64_t segment = pureInterest.getCompFromBackAsInt (0);
-  Name deviceName = pureInterest.getPartialName (1, pureInterest.size () - 2);
-  Hash hash (head(pureInterest.getComp (0)), pureInterest.getComp (0).size());
+  int64_t segment = name.getCompFromBackAsInt (0);
+  Name deviceName = name.getPartialName (0, name.size () - 4);
+  Hash hash (head(name.getCompFromBack (1)), name.getCompFromBack (1).size());
 
   _LOG_DEBUG (" server FILE for device: " << deviceName << ", file_hash: " << hash.shortHash () << " segment: " << segment);
 
@@ -218,17 +204,16 @@
 }
 
 void
-ContentServer::serve_Action_Execute (Name forwardingHint, Name locatorPrefix, Name interest)
+ContentServer::serve_Action_Execute (Name forwardingHint, Name interest)
 {
   // forwardingHint: /<forwarding-hint>
-  // locatorPrefix:  /<forwarding-hint>/<appname>/<shared-folder>/action
-  // interest:       /<forwarding-hint>/<appname>/<shared-folder>/action/<device_name>/<action-seq>
+  // interest:       /<forwarding-hint>/<device_name>/<appname>/action/<shared-folder>/<action-seq>
 
-  Name pureInterest = interest.getPartialName (locatorPrefix.size ());
-  // pureInterest:  /<device_name>/<action-seq>
+  Name name = interest.getPartialName (forwardingHint.size());
+  // name for actions: /<device_name>/<appname>/action/<shared-folder>/<action-seq>
 
-  int64_t seqno = pureInterest.getCompFromBackAsInt (0);
-  Name deviceName = pureInterest.getPartialName (0, pureInterest.size () - 1);
+  int64_t seqno = name.getCompFromBackAsInt (0);
+  Name deviceName = name.getPartialName (0, name.size () - 4);
 
   _LOG_DEBUG (" server ACTION for device: " << deviceName << " and seqno: " << seqno);