diff --git a/iguana/exchanges/LP_remember.c b/iguana/exchanges/LP_remember.c index c45fc26c4..2c5713943 100644 --- a/iguana/exchanges/LP_remember.c +++ b/iguana/exchanges/LP_remember.c @@ -1297,6 +1297,8 @@ char *LP_recent_swaps(int32_t limit) item = cJSON_CreateObject(); jaddnum(item,"expiration",Alice_expiration); jaddnum(item,"timeleft",Alice_expiration-time(NULL)); + jaddnum(item,"requestid",LP_Alicequery.R.requestid); + jaddnum(item,"quoteid",LP_Alicequery.R.quoteid); jaddstr(item,"bob",LP_Alicequery.srccoin); jaddstr(item,"base",LP_Alicequery.srccoin); jaddnum(item,"basevalue",dstr(LP_Alicequery.satoshis)); @@ -1308,27 +1310,33 @@ char *LP_recent_swaps(int32_t limit) return(jprint(retjson,1)); } -int32_t basilisk_swap_addarray(cJSON *item,char *refbase,char *refrel) +uint64_t basilisk_swap_addarray(cJSON *item,char *refbase,char *refrel) { - char *base,*rel; + char *base,*rel; uint32_t requestid,quoteid; uint64_t ridqid = 0; base = jstr(item,"bob"); rel = jstr(item,"alice"); if ( refrel == 0 || refrel[0] == 0 ) { if ( strcmp(base,refbase) == 0 || strcmp(rel,refbase) == 0 ) - return(1); + ridqid = 1; } else if ( strcmp(base,refbase) == 0 && strcmp(rel,refrel) == 0 ) - return(1); - return(0); + ridqid = 1; + if ( ridqid != 0 ) + { + requestid = jint(item,"requestid"); + quoteid = jint(item,"quoteid"); + ridqid = ((uint64_t)requestid << 32) | quoteid; + } + return(ridqid); } char *basilisk_swapentries(char *refbase,char *refrel,int32_t limit) { - char *liststr,*retstr2; cJSON *retjson,*array,*pending,*swapjson,*item,*retarray; int32_t i,n; uint32_t requestid,quoteid; + uint64_t ridqids[1024],ridqid; char *liststr,*retstr2; cJSON *retjson,*array,*pending,*swapjson,*item,*retarray; int32_t i,j,n,count = 0; uint32_t requestid,quoteid; if ( limit <= 0 ) limit = 10; - printf("swapentries %s %s limit.%d\n",refbase,refrel,limit); + memset(ridqids,0,sizeof(ridqids)); retarray = cJSON_CreateArray(); if ( (liststr= basilisk_swaplist(0,0)) != 0 ) { @@ -1340,9 +1348,10 @@ char *basilisk_swapentries(char *refbase,char *refrel,int32_t limit) for (i=0; i 0 ) + if ( (ridqid= basilisk_swap_addarray(item,refbase,refrel)) > 0 ) { - printf("add %d of %d\n",i,n); + if ( count < sizeof(ridqids)/sizeof(*ridqids) ) + ridqids[count++] = ridqid; jaddi(retarray,jduplicate(item)); } } @@ -1351,7 +1360,6 @@ char *basilisk_swapentries(char *refbase,char *refrel,int32_t limit) } free(liststr); } - printf("check recents\n"); if ( (liststr= LP_recent_swaps(limit)) != 0 ) { if ( (retjson= cJSON_Parse(liststr)) != 0 ) @@ -1363,24 +1371,45 @@ char *basilisk_swapentries(char *refbase,char *refrel,int32_t limit) item = jitem(array,i); requestid = juint(jitem(item,0),0); quoteid = juint(jitem(item,1),0); - printf("r%u q%u\n",requestid,quoteid); - if ( (retstr2= basilisk_swapentry(requestid,quoteid)) != 0 ) + ridqid = ((uint64_t)requestid << 32) | quoteid; + for (j=0; j 0 ) - jaddi(retarray,swapjson); - else free_json(swapjson); + if ( (swapjson= cJSON_Parse(retstr2)) != 0 ) + { + if ( basilisk_swap_addarray(swapjson,refbase,refrel) > 0 ) + { + if ( count < sizeof(ridqids)/sizeof(*ridqids) ) + ridqids[count++] = ridqid; + jaddi(retarray,swapjson); + } else free_json(swapjson); + } + free(retstr2); } - free(retstr2); } } } if ( (pending= jobj(retjson,"pending")) != 0 ) { - if ( basilisk_swap_addarray(pending,refbase,refrel) > 0 ) - jaddi(retarray,pending); - else free_json(pending); + requestid = juint(pending,"requestid"); + quoteid = juint(pending,"quoteid"); + j = 0; + if ( (ridqid= ((uint64_t)requestid << 32) | quoteid) != 0 ) + { + for (j=0; j 0 ) + jaddi(retarray,pending); + else free_json(pending); + } else free_json(pending); } free_json(retjson); }