// -------------------------------------------------------------------------------------- void Ajp13Socket::OnTransferLimit() { char msg[8192]; msg[0] = 'A'; msg[1] = 'B'; // Send Body Chunk size_t n = m_res.GetFile().fread(msg + 7, 1, 8100); while (n > 0) { int ptr = 4; put_byte(msg, ptr, 0x03); // send body chunk put_integer(msg, ptr, (short)n); ptr += (int)n; short len = htons( ptr - 4 ); memcpy( msg + 2, &len, 2 ); SendBuf( msg, ptr ); if (GetOutputLength() > 1) { SetTransferLimit( 1 ); break; } // n = m_res.GetFile().fread(msg + 7, 1, 8100); } if (!GetOutputLength()) // all body data sent and no data in output buffer - send end response { // End Response int ptr = 4; put_byte(msg, ptr, 0x05); // end response put_boolean(msg, ptr, false); // reuse /* don't reuse - but with m_req.Reset() and m_res.Reset() it should be possible - also reset any AjpBaseSocket/Ajp13Socket specific states */ short len = htons( ptr - 4 ); memcpy( msg + 2, &len, 2 ); SendBuf( msg, ptr ); SetTransferLimit(0); m_res.GetFile().fclose(); OnResponseComplete(); } }
CORBA_boolean porbit_put_sv (GIOPSendBuffer *buf, CORBA_TypeCode tc, SV *sv) { switch (tc->kind) { case CORBA_tk_null: case CORBA_tk_void: return CORBA_TRUE; case CORBA_tk_short: return put_short (buf, sv); case CORBA_tk_long: return put_long (buf, sv); case CORBA_tk_ushort: return put_ushort (buf, sv); case CORBA_tk_ulong: return put_ulong (buf, sv); case CORBA_tk_float: return put_float (buf, sv); case CORBA_tk_double: return put_double (buf, sv); case CORBA_tk_char: return put_char (buf, sv); case CORBA_tk_boolean: return put_boolean (buf, sv); case CORBA_tk_octet: return put_octet (buf, sv); case CORBA_tk_enum: return put_enum (buf, tc, sv); case CORBA_tk_struct: return put_struct (buf, tc, sv); case CORBA_tk_sequence: return put_sequence (buf, tc, sv); case CORBA_tk_except: return put_except (buf, tc, sv); case CORBA_tk_objref: return put_objref (buf, tc, sv); case CORBA_tk_union: return put_union (buf, tc, sv); case CORBA_tk_alias: return put_alias (buf, tc, sv); case CORBA_tk_string: return put_string (buf, tc, sv); case CORBA_tk_array: return put_array (buf, tc, sv); case CORBA_tk_longlong: return put_longlong (buf, sv); case CORBA_tk_ulonglong: return put_ulonglong (buf, sv); case CORBA_tk_longdouble: return put_longdouble (buf, sv); case CORBA_tk_TypeCode: return put_typecode (buf, tc, sv); case CORBA_tk_any: return put_any (buf, tc, sv); case CORBA_tk_fixed: return put_fixed (buf, tc, sv); case CORBA_tk_wchar: case CORBA_tk_wstring: case CORBA_tk_Principal: default: warn ("Unsupported output typecode %d\n", tc->kind); return CORBA_FALSE; } }