Merge pull request #1844 from jrw972/monterey
[ACE_TAO.git] / ACE / apps / JAWS2 / HTTP_10_Write.cpp
blob97ded62a99c71760b947f18023cf607a73a01967
1 #include "JAWS/JAWS.h"
2 #include "JAWS/IO.h"
3 #include "JAWS/IO_Handler.h"
4 #include "JAWS/Policy.h"
6 #include "HTTP_10.h"
8 #include "HTTP_10_Request.h"
12 // --------------- WRITE TASK ----------------------
14 JAWS_HTTP_10_Write_Task::JAWS_HTTP_10_Write_Task (void)
18 JAWS_HTTP_10_Write_Task::~JAWS_HTTP_10_Write_Task (void)
22 int
23 JAWS_HTTP_10_Write_Task::handle_put (JAWS_Data_Block *data, ACE_Time_Value *)
25 JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put");
27 JAWS_IO_Handler *handler = data->io_handler ();
29 JAWS_Dispatch_Policy *policy = this->policy ();
30 if (policy == 0) policy = data->policy ();
32 JAWS_IO *io = policy->io ();
34 JAWS_HTTP_10_Request *info = static_cast<JAWS_HTTP_10_Request *> (data->payload ());
36 if (info->status () == (int) JAWS_HTTP_10_Request::STATUS_QUIT)
38 data->payload (0);
39 delete info;
40 return -3;
43 #if 0
44 ACE_DEBUG ((LM_DEBUG, " (%t) request %s::%s::%s parsed\n",
45 (info->method () ? info->method () : "-"),
46 (info->uri () ? info->uri () : "="),
47 (info->version () ? info->version () : "HTTP/0.9")));
48 #endif
50 if (info->type () != (int) JAWS_HTTP_10_Request::GET)
51 info->set_status (JAWS_HTTP_10_Request::STATUS_NOT_IMPLEMENTED);
53 if (info->type () == (int) JAWS_HTTP_10_Request::QUIT)
54 info->set_status (JAWS_HTTP_10_Request::STATUS_QUIT);
56 if (info->status () != (int) JAWS_HTTP_10_Request::STATUS_OK)
58 JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, ! STATUS OK");
60 char msg[] =
61 "<html><head><title>HTTP/1.0 500 Internal Server Error</title>"
62 "<body><h1>Server Error</h1>HTTP/1.0 500 Internal Server Error"
63 "</body></html>";
65 io->send_error_message (handler, msg, sizeof (msg));
66 switch (handler->status ())
68 case JAWS_IO_Handler::WRITE_OK:
69 case JAWS_IO_Handler::WRITE_OK_A:
70 if (info->status () == (int) JAWS_HTTP_10_Request::STATUS_QUIT)
72 data->payload (0);
73 delete info;
74 return -3;
77 data->payload (0);
78 delete info;
79 return 0;
81 case JAWS_IO_Handler::WRITE_ERROR:
82 case JAWS_IO_Handler::WRITE_ERROR_A:
83 data->payload (0);
84 delete info;
85 return -1;
87 default:
88 return 2;
91 return 2;
93 else
95 if (ACE_OS::strcmp (info->version (), "HTTP/0.9") == 0)
96 io->transmit_file (handler,
97 info->path (),
98 "",
102 else
103 io->transmit_file (handler,
104 info->path (),
105 "HTTP/1.0 200 Ok\r\n\r\n",
110 switch (handler->status ())
112 case JAWS_IO_Handler::TRANSMIT_OK_A:
114 JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, OK_A");
115 data->payload (0);
116 delete info;
117 return 1;
120 case JAWS_IO_Handler::TRANSMIT_OK:
122 JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, OK");
123 data->payload (0);
124 delete info;
125 return 0;
127 case JAWS_IO_Handler::TRANSMIT_ERROR:
129 JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, ERROR");
130 data->payload (0);
131 delete info;
132 return 0;
134 case JAWS_IO_Handler::TRANSMIT_ERROR_A:
136 JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, ERROR_A");
137 data->payload (0);
138 delete info;
139 return 1;
141 default:
143 JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, DEFAULT");
144 data->payload (0);
145 delete info;
146 return 1;
152 data->payload (0);
153 delete info;
154 return -1;