Commit Graph

173 Commits

Author SHA1 Message Date
Johan Hedberg
b8779d2202 Revert "Ensure config.h is included by using CPPFLAGS"
This reverts commit 8a03376544.

The patch needs to be split up and the gdbus/ changes were bogus
compared to the original commit message.

Conflicts:
	Makefile.am
	Makefile.obexd
	profiles/cyclingspeed/cyclingspeed.c
	profiles/heartrate/heartrate.c
	src/error.c
2012-12-07 12:46:04 +02:00
Lucas De Marchi
8a03376544 Ensure config.h is included by using CPPFLAGS
Instead of trying to include config.h in each file over the tree and
possibly forgetting to include it, give a "-include config.h" argument
to the compiler so it's guaranteed that a) it will be included for all
source files and b) it will be the first header included.

gdbus/ directory is left out, since it would break other projects using
it.
2012-12-05 17:18:07 +02:00
Luiz Augusto von Dentz
c5cab062fc gobex: Fix build on 32 bits systems
GUINT_TO_POINTER does not cast properly in older version of GLib (< 2.31)
causing the following errors:

cc1: warnings being treated as errors
gobex/gobex-apparam.c: In function ‘g_obex_apparam_set_bytes’:
gobex/gobex-apparam.c:176:38: error: cast to pointer from integer of
different size
gobex/gobex-apparam.c: In function ‘g_obex_apparam_get_uint8’:
gobex/gobex-apparam.c:243:43: error: cast to pointer from integer of
different size
gobex/gobex-apparam.c: In function ‘g_obex_apparam_get_uint16’:
gobex/gobex-apparam.c:261:43: error: cast to pointer from integer of
different size
gobex/gobex-apparam.c: In function ‘g_obex_apparam_get_uint32’:
gobex/gobex-apparam.c:282:43: error: cast to pointer from integer of
different size
gobex/gobex-apparam.c: In function ‘g_obex_apparam_get_uint64’:
gobex/gobex-apparam.c:303:43: error: cast to pointer from integer of
different size
gobex/gobex-apparam.c: In function ‘g_obex_apparam_get_string’:
gobex/gobex-apparam.c:324:43: error: cast to pointer from integer of
different size
gobex/gobex-apparam.c: In function ‘g_obex_apparam_get_bytes’:
gobex/gobex-apparam.c:342:43: error: cast to pointer from integer of
different size
make[1]: *** [gobex/gobex-apparam.o] Error 1
make: *** [all] Error 2
2012-12-04 22:22:06 +01:00
Luiz Augusto von Dentz
696fad1853 gobex: Add debug option to apparam
This adds "apparam" to the debug options of GOBEX_DEBUG
2012-12-04 22:22:06 +01:00
Luiz Augusto von Dentz
63d1b60c8c gobex: Integrate GObexApparam with GObexHeader
This introduce 2 new convenient functions: g_obex_header_get_apparam
which parses and decode an header into GObexApparam and
gobex_header_new_apparam that encode GObexApparam into GObexHeader.
2012-12-04 22:22:06 +01:00
Luiz Augusto von Dentz
32ffe8f9d6 gobex: Introduce GObexApparam API
GObexApparam abstract the handling of application parameter tags, it
can be used to read/parse application parameter header data using
g_obex_apparam_get_* functions or to generate the data using
g_obex_apparam_set_*.
2012-12-04 22:22:06 +01:00
Luiz Augusto von Dentz
4621a3573c gobex: Fix not printing debug messages when GOBEX_DEBUG is set
g_debug doesn't print anything if domain is not present in
G_MESSAGES_DEBUG.
2012-12-04 22:22:06 +01:00
Neal Peacock
a3bb0a6dc5 gobex: Change UTF name to standard 2012-12-04 22:22:06 +01:00
Szymon Janc
55626b774e gobex: Fix dead assignments in gobex-header.c
Values stored are never read.
2012-12-04 22:22:06 +01:00
Jaganath Kanakkassery
9095deb825 gobex: Add callback and userdata parameter to g_obex_cancel_transfer()
If callback is provided in g_obex_cancel_transfer() current complete
callback will be replaced by the new one and user will be informed
when abort completes.
2012-12-04 22:22:06 +01:00
Marcel Holtmann
cd8a24b9fa gobex: build: Remove glib-helper.h support 2012-12-04 22:22:06 +01:00
Mikel Astiz
45df7c0fe3 gobex: fix callback remove when canceling transfer
This code path could lead to situations where the callback is later
used, making the daemon crash.
2012-12-04 22:22:06 +01:00
Luiz Augusto von Dentz
75e50f781b gobex: Use ENOSYS to correspond to OBEX not implemented
ENOSYS correspond to function not implemented which is exactly what the
OBEX error code means.

Also since EINVAL means invalid argument that now map to OBEX bad request
2012-12-04 22:22:06 +01:00
Luiz Augusto von Dentz
faac92a4cb gobex: Translate posix error code to proper OBEX response opcode
This patch create a map between posix errors code and OBEX response
opcode and use it to generate a proper response in case a transfer
failed instead of always responding with internal error.
2012-12-04 22:22:05 +01:00
Jaganath Kanakkassery
b53a70510f gobex: Fix ABORT request not processing
G_OBEX_OP_ABORT is defined as 0x7f but error checking of opcode is
done for greater than 0x1f. So abort request is simply ignored.
2012-12-04 22:22:05 +01:00
Luiz Augusto von Dentz
a4f6139e72 gobex: fix automatically including SRM header in CONNECT responses
GOEP 2.0 test specification forbids the server to include SRM headers in
CONNECT response:

  "3.16 TP/SRM/BI-03-C Process an OBEX CONNECT request (incorrectly)
  containing a SRM header:

  • Expected Outcome
  Pass Verdict:
  – On receiving the invalid SRM header in the OBEX_CONNECT request, the
  IUT responds with a SUCCESS without a SRM header.
  – OBEX/L2CAP channel is established.
  Fail Verdict:
  – On receiving the invalid SRM header in the OBEX_CONNECT request, the
  IUT does not respond with a SUCCESS and/or includes a SRM header in the
  response.
  – OBEX/L2CAP channel is not established or OBEX/RFCOMM channel is
  established."
2012-12-04 22:22:05 +01:00
Luiz Augusto von Dentz
f55ddf7376 gobex: fix not disabling SRM when dealing with GET responses
While sending the final bit can be changed during encoding.
2012-12-04 22:22:05 +01:00
Jaganath Kanakkassery
7099bdd9ea gobex: Remove reduntant NULL assignment 2012-12-04 22:22:05 +01:00
Luiz Augusto von Dentz
e85cc70c4f gobex: automatically use SRM when transport type is SOCK_SEQPACKET
This simplifies the applications so SRM setup phase became transparent
while using SOCK_SEQPACKET which is useful for GOEP 2.0 since in that
case we can only use SRM if the transport is L2CAP.

This also follows GOEP 2.0 Page 14 - 4.6 Using Single Response Mode:

  "The Server cannot issue an enable request, but can only issue a
  response to an enable request from the Client. SRM will remain in
  effect for the duration of the operation that enabled it (PUT or GET)
  ...
  SRM headers shall not be sent in CONNECT request or response packets."

and Page 22 - 5.4 Establishment of OBEX Connection:

  "SRM headers shall not be sent in the Connect request or response
  packets (note, this is to preserve backwards compatibility). SRM shall
  be enabled through Put and Get operations only."

So only in case of PUT or GET requests SRM is automatically configured,
applications can still enable it manually for other operations by adding
the headers like before but it is not recommended.

Note that it would be a good practice to indicate SRM support by using
value 0x02, but since that should happens during CONNECT command it is
not done automatically for requests when acting as a client, server
responding to indicate requests will automatically add SRM headers though.
2012-12-04 22:22:05 +01:00
Luiz Augusto von Dentz
f062c46212 gobex: handle Single Response Mode Parameters (SRMP) headers
Single Response Mode Parameters is a 1-byte quantity containing the
value for the parameters used for SRM.
2012-12-04 22:22:05 +01:00
Luiz Augusto von Dentz
6e7d00ceec gobex: handle Single Response Mode (SRM) headers
Single Response Mode (SRM) is a 1-byte quantity containing a value to
enable or disable SRM, as well as to indicate support for SRM.
2012-12-04 22:22:05 +01:00
Luiz Augusto von Dentz
c11d66be4c gobex: introduce g_obex_get_rsp_pkt
g_obex_get_rsp_pkt takes a response packet which sometimes is more
convenient for adding headers.
2012-12-04 22:22:05 +01:00
Luiz Augusto von Dentz
ab6b0ae829 gobex: reduce duplicated code in g_obex_put_req
g_obex_put_req is quite similar to g_obex_put_req_pkt so now it just
call it to avoid duplicating this code.
2012-12-04 22:22:04 +01:00
Luiz Augusto von Dentz
dd0e00c06f gobex: add defines for possible values of SRMP header
Also rename G_OBEX_HDR_SRM_PARAMETERS to just G_OBEX_HDR_SRMP as the spec
normally refer to it.
2012-12-04 22:22:04 +01:00
Luiz Augusto von Dentz
474d67b631 gobex: add defines for possible values of SRM header 2012-12-04 22:22:04 +01:00
Mikel Astiz
7dbc36186e gobex: fix transfer search in transfer_complete
The previous approach searched the transfer pointer itself, assuming
that the transfers has not been modified if the pointer is in the list.
However the callback could have removed the transfer and registered
another one, which can eventually point to the same memory location.

This is solved by looking for the transfer id instead of the pointer.
2012-12-04 22:22:04 +01:00
Bartosz Szatkowski
d2b34b6a68 gobex: Add translating error codes to strings 2012-12-04 22:22:04 +01:00
Luiz Augusto von Dentz
1c0b69678f gobex: fix removing wrong id on transfer_free
If statement checks for get_id handle but was removing req_id.
2012-12-04 22:22:04 +01:00
Bartosz Szatkowski
b8cc54f1b9 gobex: Add "cd ../dir" handling in setpath 2012-12-04 22:22:04 +01:00
Luiz Augusto von Dentz
16e1f86a1e gobex: make connection id check less strict
OBEX spec says:

  Only the first packet in the request needs to contain the Connection
  Id header...

  If a Connection Id header is received with an invalid connection
  identifier, it is recommended that the operation be rejected with the
  response code (0xD3) “Service Unavailable”.

Since not all requests packets need to contain Connection Id header we
should only try to validate it in case a header is received.

Reported by Hendrik Sattler <post@hendrik-sattler.de>
2012-12-04 22:22:04 +01:00
Luiz Augusto von Dentz
ad8d85382f gobex: fix sending Connection ID header in all requests
According to both OBEX and GOEP specs Connection ID should only be
included in the first packet of a request.
2012-12-04 22:22:04 +01:00
Luiz Augusto von Dentz
bc654c5048 gobex: fix not tracking received responses
obex->rx_last_op is only updated if there is no pending request which
means it only store last received request.
2012-12-04 22:22:04 +01:00
Luiz Augusto von Dentz
30b091c42e gobex: fix checking connection id for ABORT
OBEX spec state that it is optional to send a Connection Id header in an
OBEX ABORT operation.

Reported by Hendrik Sattler <post@hendrik-sattler.de>
2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
704d8b47a3 gobex: add check for connection id
Since gobex maintain the connection id of the session it is more
convenient to check whether the incoming request connection matches
before calling the application handlers.
2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
206f64d3ed gobex: remove extra define of G_OBEX_RSP_SUCCESS 2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
bf8b55059e gobex: dump data when G_OBEX_DEBUG_DATA is set 2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
85db8f76c3 gobex: log packets using G_OBEX_DEBUG_PACKET 2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
f6952b7e3a gobex: log headers using G_OBEX_DEBUG_HEADER 2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
48bbe41993 gobex: log transfers using G_OBEX_DEBUG_TRANSFER 2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
6690cd3b76 gobex: log commands using G_OBEX_DEBUG_COMMAND 2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
fffdbad4a8 gobex: log errors using G_OBEX_DEBUG_ERROR 2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
54da6b6ad2 gobex: add initial support for debug
This adds support for debug using GOBEX_DEBUG environment variable.
2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
e058d7a519 gobex: fix includes of config.h 2012-12-04 22:22:03 +01:00
Luiz Augusto von Dentz
745e460a58 gobex: add missing checks for config.h 2012-12-04 22:22:03 +01:00
Johan Hedberg
3a7f9049c0 gobex: Fix decoding byte array headers with too small length
Length values of less than 3 are invalid.
2012-12-04 22:22:03 +01:00
Johan Hedberg
1c2da64348 gobex: Remove g_obex_packet_find_header
This was exactly the same as g_obex_packet_get_header.
2012-12-04 22:22:03 +01:00
Johan Hedberg
81dd14a05e gobex: Use larger timeout first packet in transfers
Frequently upon receiving the first packet servers will perform some
sort of user interaction to authorize the incoming request. It's
therefore wise to use a larger timeout for this first packet on the
client side.
2012-12-04 22:22:02 +01:00
Johan Hedberg
a2204214c2 gobex: Fix request timeout handling when aborting 2012-12-04 22:22:02 +01:00
Johan Hedberg
5b613d1174 gobex: Protect against user callback freeing internal objects
A user callback could potentially do things like g_obex_cancel_request
or g_obex_unref while we are inside the IO watch callback. It is
therefore important to ensure that we are in a consistent state when the
user callback returns.
2012-12-04 22:22:02 +01:00
Johan Hedberg
5c50f04098 gobex: Protect against transfer_complete callback removing the transfer 2012-12-04 22:22:02 +01:00