Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
be6939f657
  1. 34
      iguana/iguana_rpc.c

34
iguana/iguana_rpc.c

@ -618,13 +618,14 @@ char *iguana_bitcoinRPC(struct supernet_info *myinfo,char *method,cJSON *json,ch
int32_t Supernet_lineparse(char *key,int32_t keymax,char *value,int32_t valuemax,char *src) int32_t Supernet_lineparse(char *key,int32_t keymax,char *value,int32_t valuemax,char *src)
{ {
int32_t a,b,c,n = 0; int32_t a,b,c,n = 0; char *origkey=key,*origvalue=value;
key[0] = value[0] = 0; key[0] = value[0] = 0;
while ( (c= src[n]) == ' ' || c == '\t' || c == '\n' || c == '\t' ) while ( (c= src[n]) == ' ' || c == '\t' || c == '\n' || c == '\t' )
n++; n++;
while ( (c= src[n]) != ':' && c != 0 ) while ( (c= src[n]) != ':' && c != 0 )
{ {
*key++ = c; *key++ = c;
//printf("(%c) ",c);
if ( ++n >= keymax-1 ) if ( ++n >= keymax-1 )
{ {
*key = 0; *key = 0;
@ -633,6 +634,7 @@ int32_t Supernet_lineparse(char *key,int32_t keymax,char *value,int32_t valuemax
} }
} }
*key = 0; *key = 0;
//printf("-> key.(%s)\n",origkey);
if ( src[n] != ':' ) if ( src[n] != ':' )
return(n); return(n);
n++; n++;
@ -658,7 +660,7 @@ int32_t Supernet_lineparse(char *key,int32_t keymax,char *value,int32_t valuemax
while ( (c= src[n]) == '\r' || c == '\n' ) while ( (c= src[n]) == '\r' || c == '\n' )
n++; n++;
} }
//printf("key.(%s) value.(%s)\n",key,value); //printf("key.(%s) value.(%s)\n",origkey,origvalue);
return(n); return(n);
} }
@ -679,6 +681,7 @@ cJSON *SuperNET_urlconv(char *value,int32_t bufsize,char *urlstr)
continue; continue;
} }
urlstr[i] = 0; urlstr[i] = 0;
//printf("URLSTR[%d]=%s\n",i,&urlstr[len]);
if ( (n= Supernet_lineparse(key,sizeof(key),value,bufsize,&urlstr[len])) > 0 ) if ( (n= Supernet_lineparse(key,sizeof(key),value,bufsize,&urlstr[len])) > 0 )
{ {
if ( value[0] != 0 ) if ( value[0] != 0 )
@ -695,12 +698,13 @@ cJSON *SuperNET_urlconv(char *value,int32_t bufsize,char *urlstr)
} else break; } else break;
} }
jadd(json,"lines",array); jadd(json,"lines",array);
//printf("urlconv.(%s)\n",jprint(json,0));
return(json); return(json);
} }
char *SuperNET_rpcparse(struct supernet_info *myinfo,char *retbuf,int32_t bufsize,int32_t *jsonflagp,int32_t *postflagp,char *urlstr,char *remoteaddr) char *SuperNET_rpcparse(struct supernet_info *myinfo,char *retbuf,int32_t bufsize,int32_t *jsonflagp,int32_t *postflagp,char *urlstr,char *remoteaddr)
{ {
cJSON *tokens,*argjson,*json = 0; char symbol[16],buf[4096],urlmethod[16],*data,url[1024],*retstr,*token = 0; int32_t i,j,n; cJSON *tokens,*argjson,*json = 0; char symbol[16],buf[4096],urlmethod[16],*data,url[1024],*retstr,*token = 0; int32_t i,j,n,num=0;
//printf("rpcparse.(%s)\n",urlstr); //printf("rpcparse.(%s)\n",urlstr);
for (i=0; i<sizeof(urlmethod)-1&&urlstr[i]!=0&&urlstr[i]!=' '; i++) for (i=0; i<sizeof(urlmethod)-1&&urlstr[i]!=0&&urlstr[i]!=' '; i++)
urlmethod[i] = urlstr[i]; urlmethod[i] = urlstr[i];
@ -734,28 +738,45 @@ char *SuperNET_rpcparse(struct supernet_info *myinfo,char *retbuf,int32_t bufsiz
return(0); return(0);
} }
if ( url[i] != '/' ) if ( url[i] != '/' )
token = url; token = &url[i];
n = i;
tokens = cJSON_CreateArray(); tokens = cJSON_CreateArray();
for (; url[i]!=0; i++) for (; url[i]!=0; i++)
{ {
//printf("i.%d (%c)\n",i,url[i]);
if ( url[i] == '/' ) if ( url[i] == '/' )
{ {
url[i] = 0; url[i] = 0;
if ( token != 0 ) if ( token != 0 )
{
//printf("TOKEN.(%s) i.%d\n",token,i);
jaddistr(tokens,token); jaddistr(tokens,token);
num++;
}
token = &url[i+1]; token = &url[i+1];
i++;
//printf("new token.(%s) i.%d\n",token,i+1);
continue; continue;
} }
} }
if ( token != 0 ) if ( token != 0 )
{
//printf("add token.(%s)\n",token);
jaddistr(tokens,token); jaddistr(tokens,token);
num++;
}
argjson = cJSON_CreateObject();
/*if ( num > 0 )
jaddstr(argjson,"agent",jstri(tokens,0));
if ( num > 1 )
jaddstr(argjson,"method",jstri(tokens,1));*/
//printf("urlstr.(%s)\n",urlstr+n);
if ( (json= SuperNET_urlconv(retbuf,bufsize,urlstr+n)) != 0 ) if ( (json= SuperNET_urlconv(retbuf,bufsize,urlstr+n)) != 0 )
{ {
jadd(json,"tokens",tokens); jadd(json,"tokens",tokens);
jaddstr(json,"urlmethod",urlmethod); jaddstr(json,"urlmethod",urlmethod);
if ( (data= jstr(json,"POST")) == 0 || (argjson= cJSON_Parse(data)) == 0 ) if ( (data= jstr(json,"POST")) == 0 || (argjson= cJSON_Parse(data)) == 0 )
{ {
argjson = cJSON_CreateObject();
if ( (n= cJSON_GetArraySize(tokens)) > 0 ) if ( (n= cJSON_GetArraySize(tokens)) > 0 )
{ {
jaddstr(argjson,"agent",jstri(tokens,0)); jaddstr(argjson,"agent",jstri(tokens,0));
@ -833,14 +854,15 @@ char *SuperNET_rpcparse(struct supernet_info *myinfo,char *retbuf,int32_t bufsiz
} }
} }
} }
//printf("after urlconv.(%s) argjson.(%s)\n",jprint(json,0),jprint(argjson,0));
if ( jstr(argjson,"method") == 0 ) if ( jstr(argjson,"method") == 0 )
{ {
free_json(argjson); free_json(argjson);
return(0); return(0);
} }
retstr = SuperNET_JSON(myinfo,argjson,remoteaddr); retstr = SuperNET_JSON(myinfo,argjson,remoteaddr);
//printf("(%s) {%s} -> (%s) postflag.%d (%s)\n",urlstr,jprint(argjson,0),cJSON_Print(json),*postflagp,retstr);
free_json(argjson); free_json(argjson);
//printf("(%s) -> (%s) postflag.%d (%s)\n",urlstr,cJSON_Print(json),*postflagp,retstr);
return(retstr); return(retstr);
} }
return(clonestr("{\"error\":\"couldnt process packet\"}")); return(clonestr("{\"error\":\"couldnt process packet\"}"));

Loading…
Cancel
Save