This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088

Fork of libMiMic by Ryo Iizuka

Committer:
furutani
Date:
Fri Feb 24 04:43:41 2017 +0000
Revision:
115:fa79286d8ea4
Parent:
109:18f12ac01097
Delete missing include line.; Add parameter "timeout" to TCPSocket::connect(), precv().; Fix to send ARP request to default gateway when connecting to IP address of different segment.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyatla 16:5aacf74ae574 1 #include "NyLPC_cUrlReader.h"
nyatla 14:4618692ec239 2 #include "NyLPC_utils.h"
nyatla 14:4618692ec239 3 #include <ctype.h>
nyatla 17:f29e1ca90e3d 4 NyLPC_TBool NyLPC_cUrlReader_getPath(const NyLPC_TChar* i_src,const NyLPC_TChar** path,NyLPC_TInt32* path_len)
nyatla 17:f29e1ca90e3d 5 {
nyatla 17:f29e1ca90e3d 6 const NyLPC_TChar* p=i_src;
nyatla 17:f29e1ca90e3d 7 for(;strchr("?#\0",*p)==NULL;p++);
nyatla 17:f29e1ca90e3d 8 *path=i_src;
nyatla 17:f29e1ca90e3d 9 *path_len=p-i_src;
nyatla 17:f29e1ca90e3d 10 return NyLPC_TBool_TRUE;
nyatla 17:f29e1ca90e3d 11 }
nyatla 17:f29e1ca90e3d 12
nyatla 14:4618692ec239 13 /**
nyatla 14:4618692ec239 14 * 指定したURLクエリキーの値を探します。
nyatla 14:4618692ec239 15 * @return
nyatla 14:4618692ec239 16 * クエリ値の直前のポインタです。
nyatla 14:4618692ec239 17 * 例えばキーがabcの場合、[^\?]*\?abc=cdfの場合、=の位置を返します。[^\?]*\?abc&cdfの場合、&の位置を返します。
nyatla 14:4618692ec239 18 * cdfの場合、[^\?]*\?abc=cdfはNULL,[^\?]*\?abc&cdfは終端'\0'の位置を返します。
nyatla 14:4618692ec239 19 */
nyatla 16:5aacf74ae574 20 const NyLPC_TChar* NyLPC_cUrlReader_findKeyValue(const NyLPC_TChar* i_src,const NyLPC_TChar* i_key_name)
nyatla 14:4618692ec239 21 {
nyatla 14:4618692ec239 22 const NyLPC_TChar* p=i_src;
nyatla 14:4618692ec239 23 const NyLPC_TChar* k;
nyatla 17:f29e1ca90e3d 24 NyLPC_TInt32 kn,kl;
nyatla 14:4618692ec239 25 //?検索
nyatla 14:4618692ec239 26 for(;*p!='\0' && *p!='?';p++);
nyatla 14:4618692ec239 27 if(*p!='?'){
nyatla 14:4618692ec239 28 return NULL;
nyatla 14:4618692ec239 29 }
nyatla 14:4618692ec239 30 p++;
nyatla 17:f29e1ca90e3d 31 kl=strlen(i_key_name);
nyatla 14:4618692ec239 32 //search key value
nyatla 14:4618692ec239 33 for(;;){
nyatla 14:4618692ec239 34 //word検索(alnum_-のみ)
nyatla 14:4618692ec239 35 kn=NyLPC_cFormatTextReader_readWord(p,&k);
nyatla 17:f29e1ca90e3d 36 if(strncmp(i_key_name,k,kl)==0){
nyatla 14:4618692ec239 37 break;
nyatla 14:4618692ec239 38 }
nyatla 14:4618692ec239 39 p+=kn;
nyatla 14:4618692ec239 40 for(;*p!='\0' && *p!='&';p++);
nyatla 14:4618692ec239 41 if(*p!='&'){
nyatla 14:4618692ec239 42 return NULL;
nyatla 14:4618692ec239 43 }
nyatla 14:4618692ec239 44 p++;
nyatla 14:4618692ec239 45 }
nyatla 14:4618692ec239 46 return p+kn;
nyatla 14:4618692ec239 47 }
nyatla 14:4618692ec239 48
nyatla 14:4618692ec239 49 /**
nyatla 14:4618692ec239 50 * URLから指定キー[:KEY:]のURLクエリ値[:VALUE:]を取得します。
nyatla 14:4618692ec239 51 * [:query:] := [^\?]*\?(&[:KEY:](=[:VALUE:])?&)*([:KEY:](=[:VALUE:])?)
nyatla 14:4618692ec239 52 * [:KEY:] := [a-zA-Z0-9_-]
nyatla 14:4618692ec239 53 * [:VALUE:] := [^\#&]
nyatla 14:4618692ec239 54 */
nyatla 16:5aacf74ae574 55 NyLPC_TBool NyLPC_cUrlReader_getStr(const NyLPC_TChar* i_src,const NyLPC_TChar* i_key_name,const NyLPC_TChar** str,NyLPC_TInt32* str_len)
nyatla 14:4618692ec239 56 {
nyatla 14:4618692ec239 57 const NyLPC_TChar* p;
nyatla 16:5aacf74ae574 58 p=NyLPC_cUrlReader_findKeyValue(i_src,i_key_name);
nyatla 14:4618692ec239 59 if(p==NULL || *p!='='){
nyatla 14:4618692ec239 60 *str=p;
nyatla 14:4618692ec239 61 *str_len=0;
nyatla 14:4618692ec239 62 return NyLPC_TBool_FALSE;
nyatla 14:4618692ec239 63 }
nyatla 14:4618692ec239 64 p++;
nyatla 14:4618692ec239 65 *str=p;
nyatla 14:4618692ec239 66 for(;strchr("&#\0",*p)==NULL;p++);
nyatla 14:4618692ec239 67 *str_len=p-*str;
nyatla 14:4618692ec239 68 return NyLPC_TBool_TRUE;
nyatla 14:4618692ec239 69 }
nyatla 14:4618692ec239 70
nyatla 16:5aacf74ae574 71 NyLPC_TBool NyLPC_cUrlReader_getUInt(const NyLPC_TChar* i_buf,const NyLPC_TChar* i_key_name,NyLPC_TUInt32* value)
nyatla 14:4618692ec239 72 {
nyatla 14:4618692ec239 73 NyLPC_TUInt32 l,r;
nyatla 14:4618692ec239 74 const NyLPC_TChar* p;
nyatla 16:5aacf74ae574 75 p=NyLPC_cUrlReader_findKeyValue(i_buf,i_key_name);
nyatla 14:4618692ec239 76 if(p==NULL || *p!='='){
nyatla 14:4618692ec239 77 return NyLPC_TBool_FALSE;
nyatla 14:4618692ec239 78 }
nyatla 14:4618692ec239 79 p++;
nyatla 14:4618692ec239 80 //prefixの確認
nyatla 14:4618692ec239 81 if((*p=='0') && (NyLPC_tolower(*(p+1))=='x'))
nyatla 14:4618692ec239 82 {
nyatla 14:4618692ec239 83 //16進数
nyatla 14:4618692ec239 84 p+=2;
nyatla 14:4618692ec239 85 r=l=0;
nyatla 109:18f12ac01097 86 while(isxdigit((int)(*p))){
nyatla 14:4618692ec239 87 r=r*16+NyLPC_ctox(*p);
nyatla 14:4618692ec239 88 if(l!=(r>>4)){return NyLPC_TBool_FALSE;}
nyatla 14:4618692ec239 89 l=r;
nyatla 14:4618692ec239 90 p++;
nyatla 14:4618692ec239 91 }
nyatla 14:4618692ec239 92 }else{
nyatla 14:4618692ec239 93 r=l=0;
nyatla 109:18f12ac01097 94 while(isdigit((int)(*p))){
nyatla 14:4618692ec239 95 r=r*10+NyLPC_ctoi(*p);
nyatla 14:4618692ec239 96 if(l!=(r/10)){return NyLPC_TBool_FALSE;}
nyatla 14:4618692ec239 97 l=r;
nyatla 14:4618692ec239 98 p++;
nyatla 14:4618692ec239 99 }
nyatla 14:4618692ec239 100 }
nyatla 14:4618692ec239 101 if(strchr("&#\0",*p)==NULL){
nyatla 14:4618692ec239 102 //An error if it is not terminator
nyatla 14:4618692ec239 103 return NyLPC_TBool_FALSE;
nyatla 14:4618692ec239 104 }
nyatla 14:4618692ec239 105 *value=r;
nyatla 14:4618692ec239 106 return NyLPC_TBool_TRUE;
nyatla 14:4618692ec239 107 }
nyatla 16:5aacf74ae574 108 NyLPC_TBool NyLPC_cUrlReader_getInt(const NyLPC_TChar* i_buf,const NyLPC_TChar* i_key_name,NyLPC_TInt32* value)
nyatla 14:4618692ec239 109 {
nyatla 14:4618692ec239 110 NyLPC_TInt32 l,r;
nyatla 14:4618692ec239 111 const NyLPC_TChar* p;
nyatla 16:5aacf74ae574 112 p=NyLPC_cUrlReader_findKeyValue(i_buf,i_key_name);
nyatla 14:4618692ec239 113 if(p==NULL || *p!='='){
nyatla 14:4618692ec239 114 return NyLPC_TBool_FALSE;
nyatla 14:4618692ec239 115 }
nyatla 14:4618692ec239 116 p++;
nyatla 14:4618692ec239 117 //prefixの確認
nyatla 14:4618692ec239 118 if((*p=='0') && (NyLPC_tolower(*(p+1))=='x'))
nyatla 14:4618692ec239 119 {
nyatla 14:4618692ec239 120 //16進数
nyatla 14:4618692ec239 121 p+=2;
nyatla 14:4618692ec239 122 r=l=0;
nyatla 109:18f12ac01097 123 while(isxdigit((int)(*p))){
nyatla 14:4618692ec239 124 r=r*16+NyLPC_ctox(*p);
nyatla 14:4618692ec239 125 if(l!=(r>>4)){return NyLPC_TBool_FALSE;}
nyatla 14:4618692ec239 126 l=r;
nyatla 14:4618692ec239 127 p++;
nyatla 14:4618692ec239 128 }
nyatla 14:4618692ec239 129 }else{
nyatla 14:4618692ec239 130 r=l=0;
nyatla 14:4618692ec239 131 if(*p!='-'){
nyatla 109:18f12ac01097 132 while(isdigit((int)(*p))){
nyatla 14:4618692ec239 133 r=r*10+NyLPC_ctoi(*p);
nyatla 14:4618692ec239 134 if(l!=(r/10)){return NyLPC_TBool_FALSE;}
nyatla 14:4618692ec239 135 l=r;
nyatla 14:4618692ec239 136 p++;
nyatla 14:4618692ec239 137 }
nyatla 14:4618692ec239 138 }else{
nyatla 14:4618692ec239 139 p++;
nyatla 109:18f12ac01097 140 while(isdigit((int)(*p))){
nyatla 14:4618692ec239 141 r=r*10+NyLPC_ctoi(*p);
nyatla 14:4618692ec239 142 if(l!=(r/10)){return NyLPC_TBool_FALSE;}
nyatla 14:4618692ec239 143 l=r;
nyatla 14:4618692ec239 144 p++;
nyatla 14:4618692ec239 145 }
nyatla 14:4618692ec239 146 r*=-1;
nyatla 14:4618692ec239 147 }
nyatla 14:4618692ec239 148 }
nyatla 14:4618692ec239 149 if(strchr("&#\0",*p)==NULL){
nyatla 14:4618692ec239 150 //An error if it is not terminator
nyatla 14:4618692ec239 151 return NyLPC_TBool_FALSE;
nyatla 14:4618692ec239 152 }
nyatla 14:4618692ec239 153 *value=(int)r;
nyatla 14:4618692ec239 154 return NyLPC_TBool_TRUE;
nyatla 14:4618692ec239 155 }