| 2172 | |
| 2173 | |
| 2174 | static bool_t xdr_trrq_blr(RemoteXdr* xdrs, CSTRING* blr) |
| 2175 | { |
| 2176 | /************************************** |
| 2177 | * |
| 2178 | * x d r _ t r r q _ b l r |
| 2179 | * |
| 2180 | ************************************** |
| 2181 | * |
| 2182 | * Functional description |
| 2183 | * Map a message blr string. This work is necessary because |
| 2184 | * we will use the blr to read data in the current packet. |
| 2185 | * |
| 2186 | **************************************/ |
| 2187 | if (!xdr_cstring(xdrs, blr)) |
| 2188 | return FALSE; |
| 2189 | |
| 2190 | // We care about all receives and sends from fetch |
| 2191 | |
| 2192 | if (xdrs->x_op == XDR_FREE || xdrs->x_op == XDR_ENCODE) |
| 2193 | return TRUE; |
| 2194 | |
| 2195 | rem_port* port = xdrs->x_public; |
| 2196 | Rpr* procedure = port->port_rpr; |
| 2197 | if (!procedure) |
| 2198 | procedure = port->port_rpr = FB_NEW Rpr; |
| 2199 | |
| 2200 | // Parse the blr describing the message. |
| 2201 | |
| 2202 | delete procedure->rpr_in_msg; |
| 2203 | procedure->rpr_in_msg = NULL; |
| 2204 | delete procedure->rpr_in_format; |
| 2205 | procedure->rpr_in_format = NULL; |
| 2206 | delete procedure->rpr_out_msg; |
| 2207 | procedure->rpr_out_msg = NULL; |
| 2208 | delete procedure->rpr_out_format; |
| 2209 | procedure->rpr_out_format = NULL; |
| 2210 | |
| 2211 | RMessage* message = PARSE_messages(blr->cstr_address, blr->cstr_length); |
| 2212 | while (message) |
| 2213 | { |
| 2214 | switch (message->msg_number) |
| 2215 | { |
| 2216 | case 0: |
| 2217 | procedure->rpr_in_msg = message; |
| 2218 | procedure->rpr_in_format = (rem_fmt*) message->msg_address; |
| 2219 | message->msg_address = message->msg_buffer; |
| 2220 | message = message->msg_next; |
| 2221 | procedure->rpr_in_msg->msg_next = NULL; |
| 2222 | break; |
| 2223 | case 1: |
| 2224 | procedure->rpr_out_msg = message; |
| 2225 | procedure->rpr_out_format = (rem_fmt*) message->msg_address; |
| 2226 | message->msg_address = message->msg_buffer; |
| 2227 | message = message->msg_next; |
| 2228 | procedure->rpr_out_msg->msg_next = NULL; |
| 2229 | break; |
| 2230 | default: |
| 2231 | { |
no test coverage detected