1/* 2 * Copyright 2010 Haiku Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Christophe Huriaux, c.huriaux@gmail.com 7 */ 8 9 10#include <UrlProtocolDispatchingListener.h> 11#include <Debug.h> 12 13 14const char* kUrlProtocolMessageType = "be:urlProtocolMessageType"; 15const char* kUrlProtocolCaller = "be:urlProtocolCaller"; 16 17 18BUrlProtocolDispatchingListener::BUrlProtocolDispatchingListener 19 (BHandler* handler) 20 : 21 fMessenger(handler) 22{ 23} 24 25 26BUrlProtocolDispatchingListener::BUrlProtocolDispatchingListener 27 (const BMessenger& messenger) 28 : 29 fMessenger(messenger) 30{ 31} 32 33 34void 35BUrlProtocolDispatchingListener::ConnectionOpened(BUrlProtocol* caller) 36{ 37 BMessage message(B_URL_PROTOCOL_NOTIFICATION); 38 _SendMessage(&message, B_URL_PROTOCOL_CONNECTION_OPENED, caller); 39} 40 41 42void 43BUrlProtocolDispatchingListener::HostnameResolved(BUrlProtocol* caller, 44 const char* ip) 45{ 46 BMessage message(B_URL_PROTOCOL_NOTIFICATION); 47 message.AddString("url:hostIp", ip); 48 49 _SendMessage(&message, B_URL_PROTOCOL_HOSTNAME_RESOLVED, caller); 50} 51 52 53void 54BUrlProtocolDispatchingListener::ResponseStarted(BUrlProtocol* caller) 55{ 56 BMessage message(B_URL_PROTOCOL_NOTIFICATION); 57 _SendMessage(&message, B_URL_PROTOCOL_RESPONSE_STARTED, caller); 58} 59 60 61void 62BUrlProtocolDispatchingListener::HeadersReceived(BUrlProtocol* caller) 63{ 64 BMessage message(B_URL_PROTOCOL_NOTIFICATION); 65 _SendMessage(&message, B_URL_PROTOCOL_HEADERS_RECEIVED, caller); 66} 67 68 69void 70BUrlProtocolDispatchingListener::DataReceived(BUrlProtocol* caller, 71 const char* data, ssize_t size) 72{ 73 BMessage message(B_URL_PROTOCOL_NOTIFICATION); 74 message.AddData("url:data", B_STRING_TYPE, data, size, true, 1); 75 76 _SendMessage(&message, B_URL_PROTOCOL_DATA_RECEIVED, caller); 77} 78 79 80void 81BUrlProtocolDispatchingListener::DownloadProgress(BUrlProtocol* caller, 82 ssize_t bytesReceived, ssize_t bytesTotal) 83{ 84 BMessage message(B_URL_PROTOCOL_NOTIFICATION); 85 message.AddInt32("url:bytesReceived", bytesReceived); 86 message.AddInt32("url:bytesTotal", bytesTotal); 87 88 _SendMessage(&message, B_URL_PROTOCOL_DOWNLOAD_PROGRESS, caller); 89} 90 91 92void 93BUrlProtocolDispatchingListener::UploadProgress(BUrlProtocol* caller, 94 ssize_t bytesSent, ssize_t bytesTotal) 95{ 96 BMessage message(B_URL_PROTOCOL_NOTIFICATION); 97 message.AddInt32("url:bytesSent", bytesSent); 98 message.AddInt32("url:bytesTotal", bytesTotal); 99 100 _SendMessage(&message, B_URL_PROTOCOL_UPLOAD_PROGRESS, caller); 101} 102 103 104 105void 106BUrlProtocolDispatchingListener::RequestCompleted(BUrlProtocol* caller, 107 bool success) 108{ 109 BMessage message(B_URL_PROTOCOL_NOTIFICATION); 110 message.AddBool("url:success", success); 111 112 _SendMessage(&message, B_URL_PROTOCOL_REQUEST_COMPLETED, caller); 113} 114 115 116void 117BUrlProtocolDispatchingListener::_SendMessage(BMessage* message, 118 int8 notification, BUrlProtocol* caller) 119{ 120 ASSERT(message != NULL); 121 122 message->AddPointer(kUrlProtocolCaller, caller); 123 message->AddInt8(kUrlProtocolMessageType, notification); 124 125 ASSERT(fMessenger.SendMessage(message) == B_OK); 126} 127