33 #define UDTLIB_TAB (apg_achar)9
34 #define UDTLIB_LF (apg_achar)10
35 #define UDTLIB_CR (apg_achar)13
36 #define UDTLIB_SP (apg_achar)32
37 #define UDTLIB_DOUBLE_QUOTE (apg_achar)34
38 #define UDTLIB_SINGLE_QUOTE (apg_achar)39
39 #define UDTLIB_STAR (apg_achar)42
40 #define UDTLIB_PERIOD (apg_achar)46
41 #define UDTLIB_SLASH (apg_achar)47
42 #define UDTLIB_SEMI (apg_achar)59
43 #define UDTLIB_HYPHEN (apg_achar)45
44 #define UDTLIB_0 (apg_achar)48
45 #define UDTLIB_9 (apg_achar)57
46 #define UDTLIB_UPPER_A (apg_achar)65
47 #define UDTLIB_UPPER_F (apg_achar)70
48 #define UDTLIB_UPPER_Z (apg_achar)90
49 #define UDTLIB_UNDERSCORE (apg_achar)95
50 #define UDTLIB_LOWER_A (apg_achar)97
51 #define UDTLIB_LOWER_F (apg_achar)102
52 #define UDTLIB_LOWER_X (apg_achar)120
53 #define UDTLIB_LOWER_Z (apg_achar)122
55 #define UDTLIB_PRINT_MIN (apg_achar)32
56 #define UDTLIB_PRINT_MAX (apg_achar)127
62 return ((acChar >= UDTLIB_UPPER_A && acChar <= UDTLIB_UPPER_Z) ||
63 (acChar >= UDTLIB_LOWER_A && acChar <= UDTLIB_LOWER_Z));
66 return ((acChar >= UDTLIB_0 && acChar <= UDTLIB_9));
69 return ((acChar >= UDTLIB_0 && acChar <= UDTLIB_9) ||
70 (acChar >= UDTLIB_UPPER_A && acChar <= UDTLIB_UPPER_F) ||
71 (acChar >= UDTLIB_LOWER_A && acChar <= UDTLIB_LOWER_F));
75 if(uiMaxPhraseLength > 0){
76 if(acpPhrase[0] == UDTLIB_LF){uiRet = 1;}
77 else if(acpPhrase[0] == UDTLIB_CR){
78 if(uiMaxPhraseLength > 1 && acpPhrase[1] == UDTLIB_LF){uiRet = 2;}
87 if((0 < uiMaxPhraseLength) && (uiTest =
uiLineEnd(&acpPhrase[0], uiMaxPhraseLength))){
88 if((uiTest < uiMaxPhraseLength) && acpPhrase[uiTest] == UDTLIB_SP){
98 if(acpPhrase[uiPhraseCount] == UDTLIB_SP){uiLeft--;}
99 else if(acpPhrase[uiPhraseCount] == UDTLIB_TAB){uiLeft--;}
109 uiPhraseCount = uiMaxPhraseLength - uiLeft;
112 return uiPhraseCount;
117 for(uiPhraseCount = 0; uiPhraseCount < uiMaxPhraseLength; uiPhraseCount++){
118 if(!(uiIsAlpha(acpPhrase[uiPhraseCount]) || uiIsDigit(acpPhrase[uiPhraseCount]))){
break;}
125 while(uiPhraseCount < uiMaxPhraseLength){
126 for(uiLen1 = uiPhraseCount; uiLen1 < uiMaxPhraseLength; uiLen1++){
127 if(acpPhrase[uiLen1] != UDTLIB_HYPHEN){
break;}
129 if(uiLen1 == uiPhraseCount){
break;}
132 for(uiLen2 = uiLen1; uiLen2 < uiMaxPhraseLength; uiLen2++){
133 if(!(uiIsAlpha(acpPhrase[uiLen2]) || uiIsDigit(acpPhrase[uiLen2]))){
break;}
135 if(uiLen2 == uiLen1){
break;}
136 uiPhraseCount = uiLen2;
138 return uiPhraseCount;
142 if(uiPhraseCount < uiMaxPhraseLength && uiIsAlpha(acpPhrase[uiPhraseCount])){
144 for(; uiPhraseCount < uiMaxPhraseLength; uiPhraseCount++){
145 if(!(uiIsAlpha(acpPhrase[uiPhraseCount]) || uiIsDigit(acpPhrase[uiPhraseCount]))){
break;}
152 for(uiPhraseCount = 0; uiPhraseCount < uiMaxPhraseLength; uiPhraseCount++){
153 if(!(uiIsAlpha(acpPhrase[uiPhraseCount]) || uiIsDigit(acpPhrase[uiPhraseCount]))){
break;}
155 return uiPhraseCount;
159 if((uiPhraseCount < uiMaxPhraseLength) && uiIsAlpha(acpPhrase[uiPhraseCount])){
161 if(uiPhraseCount < uiMaxPhraseLength){
162 uiPhraseCount += uiZeroOrMoreAlphaDigit(&acpPhrase[uiPhraseCount], uiMaxPhraseLength-uiPhraseCount);
164 if(uiPhraseCount < uiMaxPhraseLength){
165 uiPhraseCount += uiZeroOrMoreHyphenAlphaDigit(&acpPhrase[uiPhraseCount], uiMaxPhraseLength-uiPhraseCount);
173 apg_uint uiPhraseCount = uiRFC1035label(acpPhrase, uiMaxPhraseLength);
176 while(uiPhraseCount < uiMaxPhraseLength){
177 uiPeriod = uiPhraseCount;
178 if(acpPhrase[uiPeriod] == UDTLIB_PERIOD){
180 if(uiPeriod < uiMaxPhraseLength){
181 uiLabel = uiRFC1035label(&acpPhrase[uiPeriod], uiMaxPhraseLength-uiPeriod);
183 uiPhraseCount = uiPeriod + uiLabel;
191 return uiPhraseCount;
200 for(uiWhiteSpace1 = 0; uiWhiteSpace1 < uiMaxPhraseLength; uiWhiteSpace1++){
201 if(!((acpPhrase[uiWhiteSpace1] == UDTLIB_SP) || (acpPhrase[uiWhiteSpace1] == UDTLIB_TAB))){
break;}
203 uiCrlf =
uiLineEnd(&acpPhrase[uiWhiteSpace1], uiMaxPhraseLength-uiWhiteSpace1);
205 uiWhiteSpace2 = uiWhiteSpace1 + uiCrlf;
206 uiStart2 = uiWhiteSpace2;
213 for(; uiWhiteSpace2 < uiMaxPhraseLength; uiWhiteSpace2++){
214 if(!((acpPhrase[uiWhiteSpace2] == UDTLIB_SP) || (acpPhrase[uiWhiteSpace2] == UDTLIB_TAB))){
break;}
216 uiPhraseCount =(uiWhiteSpace2 > uiStart2) ? uiWhiteSpace2 : uiWhiteSpace1;
217 return uiPhraseCount;
227 while(uiPhraseCount < uiMaxPhraseLength){
228 uiItLen = uiOneOrMoreAlphaDigit(&acpPhrase[uiPhraseCount], uiMaxPhraseLength-uiPhraseCount);
230 uiItCount = uiItLen + uiPhraseCount;
231 uiItLen = uiZeroOrMoreHyphenAlphaDigit(&acpPhrase[uiItCount], uiMaxPhraseLength-uiItCount);
232 uiItCount += uiItLen;
233 if(uiItCount >= uiMaxPhraseLength){
break;}
234 if(acpPhrase[uiItCount] != UDTLIB_PERIOD){
break;}
236 if(!(uiIsAlpha(acpPhrase[uiItCount]) || uiIsDigit(acpPhrase[uiItCount]))){
break;}
237 uiPhraseCount = uiItCount;
246 apg_uint uiLen = uiAlphaNum(acpPhrase, uiMaxPhraseLength);
249 uiLen += uiZeroOrMoreHyphenAlphaDigit(&acpPhrase[uiLen], uiMaxPhraseLength-uiLen);
250 if(uiLen >= uiMaxPhraseLength){uiPhraseCount = uiLen;
break;}
251 if(acpPhrase[uiLen] == UDTLIB_PERIOD){uiLen++;}
252 uiPhraseCount = uiLen;
263 for(uiPhraseCount = 0; uiPhraseCount < uiMaxPhraseLength; uiPhraseCount++){
264 apg_achar acChar = acpPhrase[uiPhraseCount];
265 if(uiIsAlpha(acChar)){
continue;}
266 if(uiIsDigit(acChar)){
continue;}
287 while(uiMaxPhraseLength > 0){
289 if(uiIsAlpha(acChar)){uiPhraseCount = 1;
break;}
290 if(uiIsDigit(acChar)){uiPhraseCount = 1;
break;}
291 if(acChar == (
apg_achar)33){uiPhraseCount = 1;
break;}
293 if(acChar == (
apg_achar)45){uiPhraseCount = 1;
break;}
294 if(acChar == (
apg_achar)46){uiPhraseCount = 1;
break;}
295 if(acChar == (
apg_achar)95){uiPhraseCount = 1;
break;}
296 if(acChar == (
apg_achar)126){uiPhraseCount = 1;
break;}
306 while(uiPhraseCount < uiMaxPhraseLength){
307 apg_achar acChar = acpPhrase[uiPhraseCount];
308 if(uiIsAlpha(acChar)){uiPhraseCount++;
continue;}
309 if(uiIsDigit(acChar)){uiPhraseCount++;
continue;}
310 if(acChar == (
apg_achar)33){uiPhraseCount++;
continue;}
312 if(acChar == (
apg_achar)45){uiPhraseCount++;
continue;}
313 if(acChar == (
apg_achar)46){uiPhraseCount++;
continue;}
314 if(acChar == (
apg_achar)95){uiPhraseCount++;
continue;}
315 if(acChar == (
apg_achar)126){uiPhraseCount++;
continue;}
326 if(uiIsAlpha(acpPhrase[0])){
328 for(; uiPhraseCount < uiMaxPhraseLength; uiPhraseCount++){
329 apg_achar acChar = acpPhrase[uiPhraseCount];
330 if(uiIsAlpha(acChar)){
continue;}
331 if(uiIsDigit(acChar)){
continue;}
347 for(; uiPhraseCount < uiMaxPhraseLength; uiPhraseCount++){
348 apg_achar acChar = acpPhrase[uiPhraseCount];
349 if(uiIsAlpha(acChar)){
continue;}
350 if(uiIsDigit(acChar)){
continue;}
377 if(uiPhraseCount == 0){
break;}
378 if(uiPhraseCount >= uiMaxPhraseLength){
break;}
379 if(acpPhrase[uiPhraseCount] != (
apg_achar)
'@'){
break;}
381 for(; uiPhraseCount < uiMaxPhraseLength; uiPhraseCount++){
382 apg_achar acChar = acpPhrase[uiPhraseCount];
383 if(uiIsAlpha(acChar)){
continue;}
384 if(uiIsDigit(acChar)){
continue;}
421 if(uiMaxPhraseLength > 0){
422 uiPhraseCount = uiRFC1035subdomain(acpPhrase, uiMaxPhraseLength);
423 if(uiPhraseCount == 0 && acpPhrase[0] == UDTLIB_SP){uiPhraseCount++;}
426 if(uiPhraseCount > 0){
427 if((acpPhrase[uiPhraseCount] == UDTLIB_PERIOD) || (acpPhrase[uiPhraseCount] == UDTLIB_HYPHEN)){uiPhraseCount = 0;}
437 apg_uint uiPhraseCount = uiSws(acpPhrase, uiMaxPhraseLength);
454 uiWspLen = uiWsp(acpPhrase, uiMaxPhraseLength);
455 uiMaxPhraseLength -= uiWspLen;
456 if(uiMaxPhraseLength){
457 if(acpPhrase[uiWspLen] == (
apg_uint)
':'){
460 uiSwsLen = uiWspLen + uiSws(&acpPhrase[uiWspLen], uiMaxPhraseLength);
470 uiSwsLen1 = uiSws(acpPhrase, uiMaxPhraseLength);
471 uiMaxPhraseLength -= uiSwsLen1;
472 if(uiMaxPhraseLength){
473 if(acpPhrase[uiSwsLen1] == acLetter){
476 uiSwsLen2 = uiSwsLen1 + uiSws(&acpPhrase[uiSwsLen1], uiMaxPhraseLength);
484 uiSwsLen1 = uiSws(acpPhrase, uiMaxPhraseLength);
485 uiMaxPhraseLength -= uiSwsLen1;
486 if(uiMaxPhraseLength){
487 if(acpPhrase[uiSwsLen1] == acLetter){
489 }
else{uiSwsLen1 = 0;}
496 if(uiMaxPhraseLength){
497 if(acpPhrase[uiSwsLen1] == acLetter){
498 uiSwsLen1 = 1 + uiSws(&acpPhrase[uiSwsLen1], uiMaxPhraseLength);
507 apg_uint uiPhraseCount = uiHLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)
',');
515 apg_uint uiPhraseCount = uiHLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)
';');
523 apg_uint uiPhraseCount = uiHLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)
'/');
531 apg_uint uiPhraseCount = uiHLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)
'=');
539 apg_uint uiPhraseCount = uiHLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)
'*');
547 apg_uint uiPhraseCount = uiHLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)
':');
555 apg_uint uiPhraseCount = uiHLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)
'(');
563 apg_uint uiPhraseCount = uiHLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)
')');
571 apg_uint uiPhraseCount = uiHRightLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)
'>');
579 apg_uint uiPhraseCount = uiHLeftLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)
'<');
587 apg_uint uiPhraseCount = uiHRightLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)34);
595 apg_uint uiPhraseCount = uiHLeftLetter(acpPhrase, uiMaxPhraseLength, (
apg_achar)34);
604 if(uiMaxPhraseLength){
605 if(uiIsDigit(acpPhrase[0]) ||
606 ((acpPhrase[0] >= (
apg_achar)97) && (acpPhrase[0]) <= (
apg_achar)102)){uiPhraseCount++;}
616 while(uiPhraseCount < uiMaxPhraseLength){
617 if(uiIsDigit(acpPhrase[uiPhraseCount]) ||
618 ((acpPhrase[uiPhraseCount] >= (
apg_achar)97) && (acpPhrase[uiPhraseCount]) <= (
apg_achar)102)){uiPhraseCount++;}
634 while(uiHex < uiMaxPhraseLength){
635 if(uiIsDigit(acpPhrase[uiHex]) ||
636 ((acpPhrase[uiHex] >= (
apg_achar)97) && (acpPhrase[uiHex]) <= (
apg_achar)102)){uiHex++;}
639 if(uiHex == (uiLDQuot + 32)){
640 uiRDQuot = uiHRightLetter(&acpPhrase[uiHex], uiMaxPhraseLength-uiHex, (
apg_achar)34);
641 if(uiRDQuot){uiPhraseCount = uiHex + uiRDQuot;}
652 for(; uiPhraseCount < uiMaxPhraseLength; uiPhraseCount++){
653 if(acpPhrase[uiPhraseCount] > (
apg_achar)255){
break;}
661 if(uiMaxPhraseLength >= 3){
662 if((acpPhrase[0] == (
apg_achar)
'%') && uiIsHexDigit(acpPhrase[1]) && uiIsHexDigit(acpPhrase[2])){uiRet = 3;}
669 while(uiPhraseCount < uiMaxPhraseLength){
670 apg_achar acChar = acpPhrase[uiPhraseCount];
671 if(uiIsAlpha(acChar)){uiPhraseCount++;
continue;}
672 if(uiIsDigit(acChar)){uiPhraseCount++;
continue;}
673 if(acChar == (
apg_achar)33){uiPhraseCount++;
continue;}
675 if(acChar == (
apg_achar)45){uiPhraseCount++;
continue;}
676 if(acChar == (
apg_achar)46){uiPhraseCount++;
continue;}
677 if(acChar == (
apg_achar)95){uiPhraseCount++;
continue;}
678 if(acChar == (
apg_achar)126){uiPhraseCount++;
continue;}
679 if(acChar == (
apg_achar)
'['){uiPhraseCount++;
continue;}
680 if(acChar == (
apg_achar)
']'){uiPhraseCount++;
continue;}
681 if(acChar == (
apg_achar)
'/'){uiPhraseCount++;
continue;}
682 if(acChar == (
apg_achar)
':'){uiPhraseCount++;
continue;}
683 if(acChar == (
apg_achar)
'&'){uiPhraseCount++;
continue;}
684 if(acChar == (
apg_achar)
'+'){uiPhraseCount++;
continue;}
685 if(acChar == (
apg_achar)
'&'){uiPhraseCount++;
continue;}
687 uiEscapedLen = uiEscaped(&acpPhrase[uiPhraseCount], uiMaxPhraseLength-uiPhraseCount);
688 if(uiEscapedLen){uiPhraseCount += uiEscapedLen;
continue;}
691 return uiPhraseCount;
696 apg_uint uiPhraseCount = uiEscaped(acpPhrase, uiMaxPhraseLength);
703 apg_uint uiPhraseCount = uiParamChars(acpPhrase, uiMaxPhraseLength);
710 apg_uint uiPhraseCount = uiParamChars(acpPhrase, uiMaxPhraseLength);
717 while(uiPhraseCount < uiMaxPhraseLength){
718 apg_achar acChar = acpPhrase[uiPhraseCount];
719 if(acChar >= 0x80 && acChar <= 0xbf){uiPhraseCount++;}
722 return uiPhraseCount;
729 while(uiPhraseCount < uiMaxPhraseLength){
730 apg_achar acChar = acpPhrase[uiPhraseCount];
733 if(acChar >= 0x21 && acChar <= 0x7e){uiPhraseCount++;}
736 else if(acChar >= 0xc0 && acChar <= 0xdf){
737 uiLen = uiPhraseCount + 1;
738 uiCont = uiUtf8Cont(&acpPhrase[uiLen], uiMaxPhraseLength-uiLen);
739 if(uiCont == 1){uiPhraseCount += 2;}
741 }
else if(acChar >= 0xe0 && acChar <= 0xef){
742 uiLen = uiPhraseCount + 1;
743 uiCont = uiUtf8Cont(&acpPhrase[uiLen], uiMaxPhraseLength-uiLen);
744 if(uiCont == 2){uiPhraseCount += 3;}
746 }
else if(acChar >= 0xf0 && acChar <= 0xf7){
747 uiLen = uiPhraseCount + 1;
748 uiCont = uiUtf8Cont(&acpPhrase[uiLen], uiMaxPhraseLength-uiLen);
749 if(uiCont == 3){uiPhraseCount += 4;}
751 }
else if(acChar >= 0xf8 && acChar <= 0xfb){
752 uiLen = uiPhraseCount + 1;
753 uiCont = uiUtf8Cont(&acpPhrase[uiLen], uiMaxPhraseLength-uiLen);
754 if(uiCont == 4){uiPhraseCount += 5;}
756 }
else if(acChar >= 0xfc && acChar <= 0xfd){
757 uiLen = uiPhraseCount + 1;
758 uiCont = uiUtf8Cont(&acpPhrase[uiLen], uiMaxPhraseLength-uiLen);
759 if(uiCont == 5){uiPhraseCount += 6;}
763 return uiPhraseCount;
769 apg_uint uiPhraseCount = uiTextUtf8Char(acpPhrase, uiMaxPhraseLength);
771 while(uiPhraseCount < uiMaxPhraseLength){
772 uiLws = uiSws(&acpPhrase[uiPhraseCount], uiMaxPhraseLength-uiPhraseCount);
774 uiMoreText = uiTextUtf8Char(&acpPhrase[uiPhraseCount+uiLws], uiMaxPhraseLength-uiPhraseCount-uiLws);
776 uiPhraseCount += uiLws + uiMoreText;
789 while(uiPhraseCount < uiMaxPhraseLength){
790 uiText = uiTextUtf8Char(&acpPhrase[uiPhraseCount], uiMaxPhraseLength-uiPhraseCount);
791 if(uiText){uiPhraseCount += uiText;
continue;}
792 uiText = uiUtf8Cont(&acpPhrase[uiPhraseCount], uiMaxPhraseLength-uiPhraseCount);
793 if(uiText){uiPhraseCount += uiText;
continue;}
794 uiText = uiSws(&acpPhrase[uiPhraseCount], uiMaxPhraseLength-uiPhraseCount);
795 if(uiText){uiPhraseCount += uiText;
continue;}
806 for(;uiPhraseCount < uiMaxPhraseLength; uiPhraseCount++){
807 if(!uiIsDigit(acpPhrase[uiPhraseCount])){
break;}
816 for(;uiPhraseCount < uiMaxPhraseLength; uiPhraseCount++){
817 if(!uiIsDigit(acpPhrase[uiPhraseCount])){
break;}
837 while(uiPhraseCount < uiMaxPhraseLength){
838 for(i = 0; i < 3 && uiLenEven < uiMaxPhraseLength; i++, uiLenEven++){
839 if(!uiIsDigit(acpPhrase[uiLenEven])){
break;}
841 if(uiLenEven == uiLenOdd){
break;}
842 if(!(acpPhrase[uiLenEven] != (
apg_achar)
':')){
break;}
844 uiLenOdd = uiLenEven + 1;
845 for(i = 0; i < 3 && uiLenOdd < uiMaxPhraseLength; i++, uiLenOdd++){
846 if(!uiIsDigit(acpPhrase[uiLenOdd])){
break;}
848 if(uiLenEven == uiLenOdd){
break;}
849 if(!(acpPhrase[uiLenOdd] != (
apg_achar)
':')){
break;}
851 uiLenEven = uiLenOdd +1;
852 for(i = 0; i < 3 && uiLenEven < uiMaxPhraseLength; i++, uiLenEven++){
853 if(!uiIsDigit(acpPhrase[uiLenEven])){
break;}
855 if(uiLenEven == uiLenOdd){
break;}
856 if(!(acpPhrase[uiLenEven] != (
apg_achar)
':')){
break;}
858 uiLenOdd = uiLenEven + 1;
859 for(i = 0; i < 3 && uiLenOdd < uiMaxPhraseLength; i++, uiLenOdd++){
860 if(!uiIsDigit(acpPhrase[uiLenOdd])){
break;}
862 if(uiLenEven == uiLenOdd){
break;}
863 uiPhraseCount = uiLenOdd;
875 while(uiPhraseCount < uiMaxPhraseLength){
876 apg_achar acChar = acpPhrase[uiPhraseCount];
879 if(uiIsAlpha(acChar)){uiPhraseCount++;
continue;}
880 if(uiIsDigit(acChar)){uiPhraseCount++;
continue;}
881 if(acChar == (
apg_achar)33){uiPhraseCount++;
continue;}
883 if(acChar == (
apg_achar)45){uiPhraseCount++;
continue;}
884 if(acChar == (
apg_achar)46){uiPhraseCount++;
continue;}
885 if(acChar == (
apg_achar)95){uiPhraseCount++;
continue;}
886 if(acChar == (
apg_achar)126){uiPhraseCount++;
continue;}
889 if(acChar == (
apg_achar)
'&'){uiPhraseCount++;
continue;}
890 if(acChar == (
apg_achar)
'='){uiPhraseCount++;
continue;}
891 if(acChar == (
apg_achar)
'+'){uiPhraseCount++;
continue;}
892 if(acChar == (
apg_achar)
'$'){uiPhraseCount++;
continue;}
893 if(acChar == (
apg_achar)
','){uiPhraseCount++;
continue;}
894 if(acChar == (
apg_achar)
';'){uiPhraseCount++;
continue;}
895 if(acChar == (
apg_achar)
'?'){uiPhraseCount++;
continue;}
896 if(acChar == (
apg_achar)
'/'){uiPhraseCount++;
continue;}
899 uiEscLen = uiEscaped(&acpPhrase[uiPhraseCount], uiMaxPhraseLength-uiPhraseCount);
900 if(uiEscLen){uiPhraseCount += uiEscLen;
continue;}
914 apg_uint uiQuotedPair, uiNonAscii, uiTest;
918 uiLen = uiSws(acpPhrase, uiMaxPhraseLength);
919 if(uiLen >= uiMaxPhraseLength){
break;}
922 if(acpPhrase[uiLen] != (
apg_achar)
'"'){
break;}
924 if(uiLen >= uiMaxPhraseLength){
break;}
927 while(uiLen < uiMaxPhraseLength){
928 acpNextPhrase = &acpPhrase[uiLen];
929 uiNextMax = uiMaxPhraseLength - uiLen;
932 uiTest = uiSws(acpNextPhrase, uiNextMax);
933 if(uiTest){uiLen += uiTest;
continue;}
935 acChar = acpPhrase[uiLen];
936 if(acChar == (
apg_achar)0x21){uiLen++;
continue;}
941 while(uiNonAscii < uiMaxPhraseLength){
942 if(acChar >= 0xc0 && acChar <= 0xdf){
943 uiTest = uiNonAscii + 1;
944 acpNextPhrase = &acpPhrase[uiTest];
945 uiNextMax = uiMaxPhraseLength - uiTest;
946 uiTest = uiUtf8Cont(acpNextPhrase, uiNextMax);
947 if(uiTest == 1){uiNonAscii += 2;}
949 }
else if(acChar >= 0xe0 && acChar <= 0xef){
950 uiTest = uiNonAscii + 1;
951 acpNextPhrase = &acpPhrase[uiTest];
952 uiNextMax = uiMaxPhraseLength - uiTest;
953 uiTest = uiUtf8Cont(acpNextPhrase, uiNextMax);
954 if(uiTest == 2){uiNonAscii += 3;}
956 }
else if(acChar >= 0xf0 && acChar <= 0xf7){
957 uiTest = uiNonAscii + 1;
958 acpNextPhrase = &acpPhrase[uiTest];
959 uiNextMax = uiMaxPhraseLength - uiTest;
960 uiTest = uiUtf8Cont(acpNextPhrase, uiNextMax);
961 if(uiTest == 3){uiNonAscii += 4;}
963 }
else if(acChar >= 0xf8 && acChar <= 0xfb){
964 uiTest = uiNonAscii + 1;
965 acpNextPhrase = &acpPhrase[uiTest];
966 uiNextMax = uiMaxPhraseLength - uiTest;
967 uiTest = uiUtf8Cont(acpNextPhrase, uiNextMax);
968 if(uiTest == 4){uiNonAscii += 5;}
970 }
else if(acChar >= 0xfc && acChar <= 0xfd){
971 uiTest = uiNonAscii + 1;
972 acpNextPhrase = &acpPhrase[uiTest];
973 uiNextMax = uiMaxPhraseLength - uiTest;
974 uiTest = uiUtf8Cont(acpNextPhrase, uiNextMax);
975 if(uiTest == 5){uiNonAscii += 6;}
980 if(uiNonAscii > uiLen){uiLen = uiNonAscii;
continue;}
983 uiQuotedPair = uiLen;
985 acpNextPhrase = &acpPhrase[uiQuotedPair];
986 uiNextMax = uiMaxPhraseLength - uiQuotedPair;
987 if(*acpNextPhrase != (
apg_achar)
'\\'){
break;}
989 if(uiQuotedPair >= uiMaxPhraseLength){
break;}
990 acChar = acpPhrase[uiQuotedPair];
991 if(acChar <= (
apg_achar)0x09){uiQuotedPair++;
break;}
996 if(uiQuotedPair != uiLen + 2){
break;}
1001 if(uiLen >= uiMaxPhraseLength){
break;}
1002 acChar = acpPhrase[uiLen];
1003 if(acpPhrase[uiLen] != (
apg_achar)
'"'){
break;}
1004 uiPhraseCount = uiLen + 1;
1013 , MSG_HDR_Accept_Encoding
1014 , MSG_HDR_Accept_Language
1015 , MSG_HDR_Alert_Info
1017 , MSG_HDR_Authentication_Info
1018 , MSG_HDR_Authorization
1022 , MSG_HDR_Content_Disposition
1023 , MSG_HDR_Content_Encoding
1024 , MSG_HDR_Content_Language
1025 , MSG_HDR_Content_Length
1026 , MSG_HDR_Content_Type
1029 , MSG_HDR_Error_Info
1032 , MSG_HDR_In_Reply_To
1033 , MSG_HDR_Max_Forwards
1034 , MSG_HDR_MIME_Version
1035 , MSG_HDR_Min_Expires
1036 , MSG_HDR_Organization
1038 , MSG_HDR_Proxy_Authenticate
1039 , MSG_HDR_Proxy_Authorization
1040 , MSG_HDR_Proxy_Require
1041 , MSG_HDR_Record_Route
1044 , MSG_HDR_Retry_After
1051 , MSG_HDR_Unsupported
1052 , MSG_HDR_User_Agent
1055 , MSG_HDR_WWW_Authenticate
1056 , MSG_HDR_extension_header
1063 static BNAMES saHdrNames[] = {
1065 {
"accept-encoding", 15},
1066 {
"accept-language", 15},
1069 {
"authentication-info", 19},
1070 {
"authorization", 13},
1074 {
"content-disposition", 19},
1075 {
"content-encoding", 16},
1076 {
"content-language", 16},
1077 {
"content-length", 14},
1078 {
"content-type", 12},
1084 {
"in-reply-to", 11},
1085 {
"maxforwards", 11},
1086 {
"mime-version", 12},
1087 {
"min-expires", 11},
1088 {
"organization", 12},
1090 {
"proxy-authenticate", 18},
1091 {
"proxy-authorization", 19},
1092 {
"proxy-require", 13},
1093 {
"record-route", 12},
1096 {
"retry-after", 11},
1103 {
"unsupported", 11},
1107 {
"www-authenticate", 16},
1113 if(uiPhraseLength == spNames->uiLength){
1114 uiRet = uiPhraseLength;
1115 for(i = 0; i < uiPhraseLength; i++){
1116 cChar = (char)acpPhrase[i];
1117 if(cChar >= (
char)65 && cChar <= (char)90){cChar += 32;}
1118 if(cChar != spNames->cpName[i]){uiRet = 0;
break;}
1125 apg_uint uiNameId = UDT_GRAMMAR5_U_EXTENSION_HEADER;
1133 for(; uiNameLen < uiMaxPhraseLength; uiNameLen++){
1134 if(acpPhrase[uiNameLen] == (
apg_achar)32 ||
1136 acpPhrase[uiNameLen] == (
apg_achar)
':'){
break;}
1138 if(uiNameLen == 0){
break;}
1141 for(uiHColon = uiNameLen; uiHColon < uiMaxPhraseLength; uiHColon++){
1142 if(!(acpPhrase[uiHColon] == (
apg_achar)32 || acpPhrase[uiHColon] == (
apg_achar)9)){
break;}
1144 if(acpPhrase[uiHColon] != (
apg_achar)
':'){
break;}
1145 uiHdr = uiHColon + 1;
1146 while(uiHdr < uiMaxPhraseLength){
1147 if(acpPhrase[uiHdr] == (
apg_achar)32){uiHdr++;
continue;}
1148 if(acpPhrase[uiHdr] == (
apg_achar)9){uiHdr++;
continue;}
1149 uiLen = uiLineContinue(&acpPhrase[uiHdr], uiMaxPhraseLength-uiHdr);
1150 if(uiLen){uiHdr += uiLen;
continue;}
1154 cChar = (char)acpPhrase[0];
1155 if(cChar >= (
char)65 && cChar <= (char)90){cChar += 32;}
1159 case 'i': uiNameId = UDT_GRAMMAR5_U_CALLID; uiIsUdt =
APG_TRUE;
break;
1160 case 'm': uiNameId = RULE_GRAMMAR5_CONTACT; uiIsUdt =
APG_FALSE;
break;
1161 case 'e': uiNameId = RULE_GRAMMAR5_CONTENT_ENCODING; uiIsUdt =
APG_FALSE;
break;
1162 case 'l': uiNameId = RULE_GRAMMAR5_CONTENT_LENGTH; uiIsUdt =
APG_FALSE;
break;
1163 case 'c': uiNameId = RULE_GRAMMAR5_CONTENT_TYPE; uiIsUdt =
APG_FALSE;
break;
1164 case 'f': uiNameId = RULE_GRAMMAR5_FROM; uiIsUdt =
APG_FALSE;
break;
1165 case 's': uiNameId = RULE_GRAMMAR5_SUBJECT; uiIsUdt =
APG_FALSE;
break;
1166 case 'k': uiNameId = RULE_GRAMMAR5_SUPPORTED; uiIsUdt =
APG_FALSE;
break;
1167 case 't': uiNameId = RULE_GRAMMAR5_TO; uiIsUdt =
APG_FALSE;
break;
1168 case 'v': uiNameId = RULE_GRAMMAR5_VIA; uiIsUdt =
APG_FALSE;
break;
1176 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Allow]) == uiNameLen){
1177 uiNameId = RULE_GRAMMAR5_ALLOW;
1182 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Accept]) == uiNameLen){
1183 uiNameId = RULE_GRAMMAR5_ACCEPT;
1188 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Alert_Info]) == uiNameLen){
1189 uiNameId = RULE_GRAMMAR5_ALERT_INFO;
1194 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Authorization]) == uiNameLen){
1195 uiNameId = RULE_GRAMMAR5_AUTHORIZATION;
1200 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Accept_Encoding]) == uiNameLen){
1201 uiNameId = RULE_GRAMMAR5_ACCEPT_ENCODING;
1203 }
else if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Accept_Language]) == uiNameLen){
1204 uiNameId = RULE_GRAMMAR5_ACCEPT_LANGUAGE;
1209 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Authentication_Info]) == uiNameLen){
1210 uiNameId = RULE_GRAMMAR5_AUTHENTICATION_INFO;
1221 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_CSeq]) == uiNameLen){
1222 uiNameId = RULE_GRAMMAR5_CSEQ;
1227 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Call_ID]) == uiNameLen){
1228 uiNameId = UDT_GRAMMAR5_U_CALLID;
1230 }
else if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Contact]) == uiNameLen){
1231 uiNameId = RULE_GRAMMAR5_CONTACT;
1236 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Call_Info]) == uiNameLen){
1237 uiNameId = RULE_GRAMMAR5_CALL_INFO;
1242 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Content_Type]) == uiNameLen){
1243 uiNameId = RULE_GRAMMAR5_CONTENT_TYPE;
1248 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Content_Length]) == uiNameLen){
1249 uiNameId = RULE_GRAMMAR5_CONTENT_LENGTH;
1254 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Content_Encoding]) == uiNameLen){
1255 uiNameId = RULE_GRAMMAR5_CONTENT_ENCODING;
1257 }
else if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Content_Language]) == uiNameLen){
1258 uiNameId = RULE_GRAMMAR5_CONTENT_LANGUAGE;
1263 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Content_Disposition]) == uiNameLen){
1264 uiNameId = RULE_GRAMMAR5_CONTENT_DISPOSITION;
1273 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Date]) == uiNameLen){
1274 uiNameId = RULE_GRAMMAR5_DATE;
1280 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Expires]) == uiNameLen){
1281 uiNameId = RULE_GRAMMAR5_EXPIRES;
1284 }
else if(uiNameLen == 10){
1285 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Error_Info]) == uiNameLen){
1286 uiNameId = RULE_GRAMMAR5_ERROR_INFO;
1292 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_From]) == uiNameLen){
1293 uiNameId = RULE_GRAMMAR5_FROM;
1298 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_In_Reply_To]) == uiNameLen){
1299 uiNameId = RULE_GRAMMAR5_REPLY_TO;
1306 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Min_Expires]) == uiNameLen){
1307 uiNameId = RULE_GRAMMAR5_MIN_EXPIRES;
1309 }
else if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Max_Forwards]) == uiNameLen){
1310 uiNameId = RULE_GRAMMAR5_MAX_FORWARDS;
1315 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_MIME_Version]) == uiNameLen){
1316 uiNameId = RULE_GRAMMAR5_MIME_VERSION;
1325 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Organization]) == uiNameLen){
1326 uiNameId = RULE_GRAMMAR5_ORGANIZATION;
1333 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Priority]) == uiNameLen){
1334 uiNameId = RULE_GRAMMAR5_PRIORITY;
1339 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Proxy_Require]) == uiNameLen){
1340 uiNameId = RULE_GRAMMAR5_PROXY_REQUIRE;
1345 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Proxy_Authenticate]) == uiNameLen){
1346 uiNameId = RULE_GRAMMAR5_PROXY_AUTHENTICATE;
1351 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Proxy_Authorization]) == uiNameLen){
1352 uiNameId = RULE_GRAMMAR5_PROXY_AUTHORIZATION;
1363 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Route]) == uiNameLen){
1364 uiNameId = RULE_GRAMMAR5_ROUTE;
1369 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Require]) == uiNameLen){
1370 uiNameId = RULE_GRAMMAR5_REQUIRE;
1375 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Reply_To]) == uiNameLen){
1376 uiNameId = RULE_GRAMMAR5_REPLY_TO;
1381 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Retry_After]) == uiNameLen){
1382 uiNameId = RULE_GRAMMAR5_ALLOW;
1387 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Record_Route]) == uiNameLen){
1388 uiNameId = RULE_GRAMMAR5_RECORD_ROUTE;
1399 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Server]) == uiNameLen){
1400 uiNameId = RULE_GRAMMAR5_SERVER;
1405 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Subject]) == uiNameLen){
1406 uiNameId = RULE_GRAMMAR5_SUBJECT;
1411 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Supported]) == uiNameLen){
1412 uiNameId = RULE_GRAMMAR5_SUPPORTED;
1421 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_To]) == uiNameLen){
1422 uiNameId = RULE_GRAMMAR5_TO;
1427 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Unsupported]) == uiNameLen){
1428 uiNameId = RULE_GRAMMAR5_UNSUPPORTED;
1433 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Via]) == uiNameLen){
1434 uiNameId = RULE_GRAMMAR5_VIA;
1441 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_Warning]) == uiNameLen){
1442 uiNameId = RULE_GRAMMAR5_WARNING;
1447 if(uiACharStricmp(acpPhrase, uiNameLen, &saHdrNames[MSG_HDR_WWW_Authenticate]) == uiNameLen){
1448 uiNameId = RULE_GRAMMAR5_WWW_AUTHENTICATE;
1457 uiNameId = UDT_GRAMMAR5_U_EXTENSION_HEADER;
1465 *uipName = uiNameId;
1466 *uipIsUdt = uiIsUdt;
1480 acpPhrase = spData->
acpSrc + uiOffset;
1481 uiMaxPhraseLength = spData->
uiSrcLen - uiOffset;
1483 uiFoundLineEnd =
uiLineEnd(acpPhrase, uiMaxPhraseLength);
1484 if(uiFoundLineEnd){
break;}
1485 uiMsgLen = uiMsgHdrName(acpPhrase, uiMaxPhraseLength, &uiNameId, &uiIsUdt);
1487 uiOffset += uiMsgLen;
1488 acpPhrase = spData->
acpSrc + uiOffset;
1489 uiMaxPhraseLength = spData->
uiSrcLen - uiOffset;
1497 acpPhrase = spData->
acpSrc + uiOffset;
1498 uiMaxPhraseLength = spData->
uiSrcLen - uiOffset;
1502 uiEnd =
uiLineEnd(acpPhrase, uiMaxPhraseLength);
1503 if(uiEnd == 0){
break;}
1505 acpPhrase = spData->
acpSrc + uiOffset;
1506 uiMaxPhraseLength = spData->
uiSrcLen - uiOffset;
1507 uiPhraseCount = uiOffset - uiSaveOffset;