示例#1
0
文件: ofile.c 项目: kingiol/cmoon
int file_get_info_by_id(mdb_conn *conn, int id, char *url, int pid, file_t **file)
{
    char mmckey[LEN_MMC_KEY];
    file_t *fl;
    size_t datalen;
    char *buf;
    int ret;
    
    if (id < 0 && (url == NULL || pid < 0))    return RET_RBTOP_INPUTE;

    if (id <= 0)
        snprintf(mmckey, LEN_MMC_KEY, "%s.%d.%s", PRE_MMC_FILE, pid, url);
    else
        snprintf(mmckey, LEN_MMC_KEY, "%s.%d", PRE_MMC_FILE, id);
    buf = mmc_get(mmckey, &datalen, 0);
    if (buf == NULL || datalen < sizeof(file_t)) {
        if (buf != NULL && datalen < sizeof(file_t)) {
            mtc_warn("get %d %d.%s info error from mmc %d",
                     id, pid, url, datalen);
        }
        if (mdb_get_errcode(conn) != MDB_ERR_NONE) {
            mtc_err("conn err %s", mdb_get_errmsg(conn));
            return RET_RBTOP_INPUTE;
        }
        fl = file_new();
        if (fl == NULL) return RET_RBTOP_MEMALLOCE;
        if (id <= 0) {
            LDB_QUERY_RAW(conn, "fileinfo", FILE_QUERY_COL,
                          "pid=%d AND name=$1", "s", pid, url);
        } else {
            LDB_QUERY_RAW(conn, "fileinfo", FILE_QUERY_COL,
                          "id=%d", NULL, id);
        }
        ret = FILE_GET_RAW(conn, fl);
        if (ret != MDB_ERR_NONE) {
            mtc_err("get %d %d.%s info failure from db %s",
                    id, pid, url, mdb_get_errmsg(conn));
            if (ret == MDB_ERR_NORESULT)
                return RET_RBTOP_NEXIST;
            return RET_RBTOP_SELECTE;
        } else {
            file_pack(fl, &buf, &datalen);
            mmc_store(MMC_OP_SET, mmckey, (void*)buf, datalen, ONE_HOUR, 0);
        }
    } else {
        ret = file_unpack(buf, datalen, &fl, NULL);
        if (ret != RET_RBTOP_OK) {
            mtc_err("assembly file from mmc error");
            return RET_RBTOP_MMCERR;
        }
    }
    free(buf);
    *file = fl;
    return RET_RBTOP_OK;
}
示例#2
0
文件: ofile.c 项目: kingiol/cmoon
int file_get_info_by_uri(mdb_conn *conn, char *uri, file_t **file)
{
    file_t *fl;
    size_t datalen;
    char *buf;
    int ret;
    
    if (uri == NULL) return RET_RBTOP_INPUTE;

    buf = mmc_getf(&datalen, 0, PRE_MMC_FILE".%s", uri);
    if (buf == NULL || datalen < sizeof(file_t)) {
        if (buf != NULL && datalen < sizeof(file_t)) {
            mtc_warn("get %s info error from mmc %d", uri, datalen);
        }
        if (mdb_get_errcode(conn) != MDB_ERR_NONE) {
            mtc_err("conn err %s", mdb_get_errmsg(conn));
            return RET_RBTOP_INPUTE;
        }
        fl = file_new();
        if (fl == NULL) return RET_RBTOP_MEMALLOCE;
        LDB_QUERY_RAW(conn, "fileinfo", FILE_QUERY_COL, "uri=$1", "s", uri);
        ret = FILE_GET_RAW(conn, fl);
        if (ret != MDB_ERR_NONE) {
            mtc_err("get %s info failure from db %s", uri, mdb_get_errmsg(conn));
            if (ret == MDB_ERR_NORESULT)
                return RET_RBTOP_NEXIST;
            return RET_RBTOP_SELECTE;
        } else {
            file_pack(fl, &buf, &datalen);
            mmc_storef(MMC_OP_SET, (void*)buf, datalen, ONE_HOUR, 0,
                       PRE_MMC_FILE".%s", uri);
        }
    } else {
        ret = file_unpack(buf, datalen, &fl, NULL);
        if (ret != RET_RBTOP_OK) {
            mtc_err("assembly file from mmc error");
            return RET_RBTOP_MMCERR;
        }
    }
    free(buf);
    *file = fl;
    return RET_RBTOP_OK;
}
示例#3
0
/* Unpack caller's information on the server, 
   or server's information returned to the client */
struct call_info *
callinfo_unpack(xmlrpc_env *envP, xmlrpc_value *s)
{
  struct call_info *cip = callinfo_new();
  xmlrpc_value *methargs, *files;
  int i;

  unpack(envP, s, "clientIP", (char **)&cip->clientIP);
  unpack(envP, s, "serverURL", &cip->serverURL);
  unpack(envP, s, "session", &cip->session);
  unpack(envP, s, "method", &cip->method);
  unpack(envP, s, "user", &cip->user);
  unpack(envP, s, "password", &cip->password);
  unpack(envP, s, "project", &cip->project);
  unpack(envP, s, "version", &cip->version);
  xmlrpc_struct_find_value(envP, s, "method-args", &methargs);
  if (methargs)
    {
      cip->nargs = xmlrpc_array_size(envP, methargs);
      cip->methodargs = malloc((cip->nargs + 1) * sizeof(char *));
      for (i = 0; i < cip->nargs; ++i)
	{
	  xmlrpc_value *v;
	  char *arg;
	  xmlrpc_array_read_item(envP, methargs, i, &v);
	  xmlrpc_read_string(envP, v, (const char **const)&arg);
	  cip->methodargs[i] = arg;
	  fprintf(stderr, "unpacked methodargs[%d] as %s\n", i, arg);
	}
      cip->methodargs[cip->nargs] = NULL;
    }
  else
    {
      cip->nargs = 0;
      cip->methodargs = NULL;
    }
  
  xmlrpc_struct_find_value(envP, s, "method-data", &files);
  if (files)
    {
      for (i = 0; i < xmlrpc_array_size(envP, files); ++i)
	{
	  struct file_data *this_file;
	  xmlrpc_value * fstruct;
	  xmlrpc_array_read_item(envP, files, i, &fstruct);
	  this_file = file_unpack(envP, fstruct);
	  if (cip->files == NULL)
	    {
	      cip->files = this_file;
	      cip->files_last = cip->files->next;
	    }
	  else
	    {
	      cip->files_last->next = this_file;
	      cip->files_last = cip->files->next;
	    }
	}
    }

  return cip;
}
示例#4
0
文件: main.c 项目: Godzil/osXdk
void main()
{
	hires();
	//file_unpackc((unsigned char*)0xa000,LabelPicture);
	file_unpack((unsigned char*)0xa000,LabelPicture);
}