コード例 #1
0
ファイル: ndpi_credis.c プロジェクト: BenjaminUJun/slick
static int cr_sendfandreceive(NDPI_REDIS rhnd, char recvtype, const char *format, ...)
{
  int rc;
  va_list ap;
  cr_buffer *buf = &(rhnd->buf);

  va_start(ap, format);
  rc = vsnprintf(buf->data, buf->size, format, ap);
  va_end(ap);

  if (rc < 0)
    return -1;

  if (rc >= buf->size) {
    DEBUG_PRINT("truncated, get more memory and try again");
    if (cr_moremem(buf, rc - buf->size + 1))
      return NDPI_CREDIS_ERR_NOMEM;

    va_start(ap, format);
    rc = vsnprintf(buf->data, buf->size, format, ap);
    va_end(ap);
  }

  buf->len = rc;

  return cr_sendandreceive(rhnd, recvtype);
}
コード例 #2
0
ファイル: ndpi_credis.c プロジェクト: BenjaminUJun/slick
static int cr_multikeystorecommand(NDPI_REDIS rhnd, const char *cmd, const char *destkey, 
                                   int keyc, const char **keyv)
{
  cr_buffer *buf = &(rhnd->buf);
  int rc;

  buf->len = 0;
  if ((rc = cr_appendstr(buf, cmd, 0)) != 0)
    return rc;
  if ((rc = cr_appendstr(buf, destkey, 1)) != 0)
    return rc;
  if ((rc = cr_appendstrarray(buf, keyc, keyv, 1)) != 0)
    return rc;

  return cr_sendandreceive(rhnd, CR_INLINE);
}
コード例 #3
0
ファイル: ndpi_credis.c プロジェクト: BenjaminUJun/slick
static int cr_multikeybulkcommand(NDPI_REDIS rhnd, const char *cmd, int keyc, 
                                  const char **keyv, char ***valv)
{
  cr_buffer *buf = &(rhnd->buf);
  int rc;

  buf->len = 0;
  if ((rc = cr_appendstr(buf, cmd, 0)) != 0)
    return rc;
  if ((rc = cr_appendstrarray(buf, keyc, keyv, 1)) != 0)
    return rc;
  if ((rc = cr_sendandreceive(rhnd, CR_MULTIBULK)) == 0) {
    *valv = rhnd->reply.multibulk.bulks;
    rc = rhnd->reply.multibulk.len;
  }

  return rc;
}
コード例 #4
0
ファイル: ndpi_credis.c プロジェクト: BenjaminUJun/slick
/* TODO add writev() support instead and push strings to send onto a vector of
 * strings to send instead... */
static int cr_zstore(NDPI_REDIS rhnd, int inter, const char *destkey, int keyc, const char **keyv, 
                     const int *weightv, NDPI_REDIS_AGGREGATE aggregate)
{
  cr_buffer *buf = &(rhnd->buf);
  int rc, i;

  buf->len = 0;
  
  if ((rc = cr_appendstrf(buf, "%s %s %d ", inter?"ZINTERSTORE":"ZUNIONSTORE", destkey, keyc)) != 0)
    return rc;
  if ((rc = cr_appendstrarray(buf, keyc, keyv, 0)) != 0)
    return rc;
  if (weightv != NULL)
    for (i = 0; i < keyc; i++)
      if ((rc = cr_appendstrf(buf, " %d", weightv[i])) != 0)
        return rc;

  switch (aggregate) {
  case NDPI_SUM: 
    rc = cr_appendstr(buf, "AGGREGATE SUM", 0);
    break;
  case NDPI_MIN:
    rc = cr_appendstr(buf, "AGGREGATE MIN", 0);
    break;
  case NDPI_MAX:
    rc = cr_appendstr(buf, "AGGREGATE MAX", 0);
    break;
  case NDPI_NONE:
    ; /* avoiding compiler warning */
  }
  if (rc != 0)
    return rc;

  if ((rc = cr_appendstr(buf, "\r\n", 0)) != 0)
    return rc;

  if ((rc = cr_sendandreceive(rhnd, CR_INT)) == 0) 
    rc = rhnd->reply.integer;

  return rc;
}
コード例 #5
0
ファイル: credis.cpp プロジェクト: w30afthc/pstat
//__attribute__ ((format(printf,3,4)))
static int cr_sendfandreceive(REDIS rhnd, char recvtype, const char *format, ...)
{
  int rc;
  va_list ap;
  cr_buffer *buf = &(rhnd->buf);

#ifdef WIN32
  ap = NULL;
#endif

  va_start(ap, format);

#ifdef WIN32 
  memset(buf->data, 0, buf->size);
  rc = _vsnprintf(buf->data, buf->size, format, ap);
#else

  rc = vsnprintf(buf->data, buf->size, format, ap);
#endif
  va_end(ap);

  if (rc < 0)
    return -1;

  if (rc >= buf->size) {
    DEBUG("truncated, get more memory and try again");
    if (cr_moremem(buf, rc - buf->size + 1))
      return CREDIS_ERR_NOMEM;

    va_start(ap, format);
    rc = vsnprintf(buf->data, buf->size, format, ap);
    va_end(ap);
  }

  buf->len = rc;

  return cr_sendandreceive(rhnd, recvtype);
}