36 int isblob = !strcmp(
tagXMLEle(root),
"setBLOBVector");
46 if (dev[0] ==
'*' && !this->
props.size())
51 else if (!strcmp(roottag,
"getProperties") && !this->
props.size() && this->allprops != 2)
55 if (!strcmp(roottag,
"enableBLOB"))
58 if (!strcmp(roottag,
"pingRequest"))
62 Msg * mp =
new Msg(
this, root);
72 log(
"Closing after malformed message\n");
84 if (!strncmp(roottag,
"set", 3))
88 if (!strncmp(roottag,
"new", 3))
90 q2Clients(
this, isblob, dev, name, mp, root);
99 log(
"shut down complete - bye!\n");
103#ifdef OSX_EMBEDED_MODE
104 fprintf(stderr,
"CLIENTS %d\n",
clients.size());
115 if (cp ==
nullptr)
continue;
120 if (cp->findDevice(dev, name) < 0)
124 if (!isblob && cp->blob ==
B_ONLY)
129 if (cp->props.size() > 0)
132 for (
auto pp : cp->props)
134 if (pp->dev == dev && pp->name == name)
149 unsigned long ql = cp->msgQSize();
158 if (strcmp(
tagXMLEle(ep),
"oneBLOB") == 0)
172 cp->log(
fmt(
"%ld bytes behind. Dropping stream BLOB...\n", ql));
179 cp->log(
fmt(
"%ld bytes behind, shutting down\n", ql));
185 cp->log(
fmt(
"queuing <%s device='%s' name='%s'>\n",
203 if (cp ==
nullptr)
continue;
206 switch (cp->allprops)
210 for (
auto pp : cp->props)
212 if (
me->dev.find(pp->dev) !=
me->dev.end())
234 unsigned long ql = cp->msgQSize();
238 cp->log(
fmt(
"%ld bytes behind, shutting down\n", ql));
245 cp->log(
fmt(
"queuing <%s device='%s' name='%s'>\n",
256 for (
auto pp :
props)
258 if ((pp->dev == dev) && (pp->name.empty() || (pp->name == name)))
268 for (
auto pp :
props)
270 if (pp->dev == dev && pp->name == name)
294 for (
auto pp :
props)
298 else if (pp->dev == dev && pp->name == name)
312 for(
auto prop :
props)
322 std::string logLine =
fmt(
"Client %d: ", this->
getRFd());
CommandLineArgs * userConfigurableArguments
std::string fmt(const char *fmt,...)
static ConcurrentSet< ClInfo > clients
virtual void log(const std::string &log) const
static void q2Clients(ClInfo *notme, int isblob, const std::string &dev, const std::string &name, Msg *mp, XMLEle *root)
static void q2Servers(DvrInfo *me, Msg *mp, XMLEle *root)
ClInfo(bool useSharedBuffer)
void crackBLOBHandling(const std::string &dev, const std::string &name, const char *enableBLOB)
int findDevice(const std::string &dev, const std::string &name) const
std::list< Property * > props
virtual void onMessage(XMLEle *root, std::list< int > &sharedBuffers)
void addDevice(const std::string &dev, const std::string &name, int isblob)
std::vector< unsigned long > ids() const
static void q2RDrivers(const std::string &dev, Msg *mp, XMLEle *root)
static void q2SDrivers(DvrInfo *me, int isblob, const std::string &dev, const std::string &name, Msg *mp, XMLEle *root)
static void crackBLOB(const char *enableBLOB, BLOBHandling *bp)
static Msg * fromXml(MsgQueue *from, XMLEle *root, std::list< int > &incomingSharedBuffers)
const char * findXMLAttValu(XMLEle *ep, const char *name)
Find an XML element's attribute value.
XMLEle * nextXMLEle(XMLEle *ep, int init)
Iterate an XML element for a list of nesetd XML elements.
XMLAtt * findXMLAtt(XMLEle *ep, const char *name)
Find an XML attribute within an XML element.
char * tagXMLEle(XMLEle *ep)
Return the tag of an XML element.
char * valuXMLAtt(XMLAtt *ap)
Return the value of an XML attribute.
XMLEle * setXMLEleTag(XMLEle *ep, const char *tag)
Update the tag of an element.
char * pcdataXMLEle(XMLEle *ep)
Return the pcdata of an XML element.
unsigned int maxStreamSizeMB
unsigned int maxQueueSizeMB