1. Си / Говнокод #3740

    +141

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    int AnalizingHeaderLine(char* HeadLine)
    {
    	if(HeadLine==NULL) return -1;
    	if(strlen(HeadLine)==0) return 0;
    
    	if(!strncmp(HeadLine,"HTTP/",5))
    		ProcessStatusHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "date:",5))
    		ProcessDateHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "server:",7))
    		ProcessServerHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "last-modified:",14))
    		ProcessLastModHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "content-type:",13))
    		ProcessContTypeHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "content-length:",15))
    		ProcessContLenHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "pragma:",7))
    		ProcessPragmaHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "Connection",10))
    		ProcessConnectHL(HeadLine);
    	else printf("Unknown header line: %s\n", HeadLine);
    	return strlen(HeadLine);
    }
    
    int ProcessStatusHL(char* HeadLine)
    {
    	short MinVer, MajVer;
    	char ResultStr[32];
    	char Num;
    	short Code;
    	Num = sscanf(HeadLine, "HTTP/%d.%d %d %s", &MinVer, &MajVer, &Code, ResultStr);
    	if(Num!=3 && Num!=4) 
    	{	printf("Error status string\n");
    		return -1;
    	}
    	return Code;
    }
    
    int ProcessDateHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessServerHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessLastModHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessContTypeHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessContLenHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessPragmaHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessConnectHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }

    CGI. Обработка HTTP-заголовков. Rev. 1.0

    Запостил: absolut, 20 Июля 2010

    Комментарии (12) RSS

    • Восхитительно. И что полагается делать с "callback"'ами?

      Вписывать туда логику, как в прописи?
      Ответить
      • Что вы подразумеваете под callback'ами в данном случае ? И кто такая пропись ?
        Несмотря на однотипные и пустые (пока) функции Process*() несложно заметить однообразие вызовов strncmp(strlwr(HeadLine) и передача длины как константы времени компиляции.
        Ответить
        • Так то только первая функция. Собственно, в ней весь 39.098 и сосредоточен. А зачем остальные приведены? Вот в чем вопрос.
          Ответить
          • Э-э ... что за магические числа (39.098) ? :)
            Остальные приведены для полноты определения.
            Можно было конечно ГК вдвое сократить.
            Ответить
            • Это атомный вес!
              Ответить
              • тонко, только причем тут кальций или калий.
                ЗЫ все, понял
                тогда уж лучше 40
                Ответить
                • Или сразу 42:)
                  Тогда было бь совсем непонятно. «Нерешаемо» в терминологии ЧГК.
                  Ответить
              • Забавно. Не забываем про изотопы.
                Ответить
      • для чего тут функции обратного вызова? кто их вызывать собрался???
        Ответить
        • Кто их обратно вызывать собрался?
          Ответить
    • else if(!strncmp(strlwr(HeadLine), "Connection",10))

      Connection уж точно не с маленькой буквы написано
      и зачем столько разных функций? ведь их смысл всех один и тот же
      Ответить
      • > Connection уж точно не с маленькой буквы написано
        Вот оно и не срабатывает никогда.
        >и зачем столько разных функций?
        Это писалось как некая заготовка для работы с HTTP.
        В конечном итоге всё из вышеперечисленного было просто закомменчено.
        Ответить

    Добавить комментарий