1284345Ssjg/*
2284345Ssjg * Copyright 2010 Haiku Inc. All rights reserved.
3284345Ssjg * Distributed under the terms of the MIT License.
4284345Ssjg *
5284345Ssjg * Authors:
6284345Ssjg *		Christophe Huriaux, c.huriaux@gmail.com
7284345Ssjg */
8284345Ssjg
9284345Ssjg
10284345Ssjg#include <UrlProtocolDispatchingListener.h>
11284345Ssjg#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