/* * * OBEX Server * * Copyright (C) 2007-2010 Marcel Holtmann * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ #define EOL "\r\n" #define VCARD_LISTING_BEGIN \ "" EOL\ "" EOL\ "" EOL #define VCARD_LISTING_ELEMENT "" EOL #define VCARD_LISTING_END "" #define PB_TELECOM_FOLDER "/telecom" #define PB_CONTACTS_FOLDER "/telecom/pb" #define PB_CALENDAR_FOLDER "/telecom/cal" #define PB_NOTES_FOLDER "/telecom/nt" #define PB_CALLS_COMBINED_FOLDER "/telecom/cch" #define PB_CALLS_INCOMING_FOLDER "/telecom/ich" #define PB_CALLS_MISSED_FOLDER "/telecom/mch" #define PB_CALLS_OUTGOING_FOLDER "/telecom/och" #define PB_LUID_FOLDER "/telecom/luid" #define PB_CONTACTS "/telecom/pb.vcf" #define PB_CALLS_COMBINED "/telecom/cch.vcf" #define PB_CALLS_INCOMING "/telecom/ich.vcf" #define PB_CALLS_MISSED "/telecom/mch.vcf" #define PB_CALLS_OUTGOING "/telecom/och.vcf" #define PB_DEVINFO "/telecom/devinfo.txt" #define PB_INFO_LOG "/telecom/pb/info.log" #define PB_CC_LOG "/telecom/pb/luid/cc.log" struct apparam_field { /* list and pull attributes */ uint16_t maxlistcount; uint16_t liststartoffset; /* pull and vcard attributes */ uint64_t filter; uint8_t format; /* list attributes only */ uint8_t order; uint8_t searchattrib; char *searchval; }; /* * Interface between the PBAP core and backends to retrieve * all contacts that match the application parameters rules. * Contacts will be returned in the vcard format. */ typedef void (*phonebook_cb) (const char *buffer, size_t bufsize, int vcards, int missed, gboolean lastpart, void *user_data); /* * Interface between the PBAP core and backends to * append a new entry in the PBAP folder cache. */ #define PHONEBOOK_INVALID_HANDLE 0xffffffff typedef void (*phonebook_entry_cb) (const char *id, uint32_t handle, const char *name, const char *sound, const char *tel, void *user_data); /* * After notify all entries to PBAP core, the backend * needs to notify that the operation has finished. */ typedef void (*phonebook_cache_ready_cb) (void *user_data); int phonebook_init(void); void phonebook_exit(void); /* * Changes the current folder in the phonebook back-end. The PBAP core * doesn't validate or restrict the possible values for the folders, * allowing non-standard backends implementation which doesn't follow * the PBAP virtual folder architecture. Validate the folder's name * is responsibility of the back-ends. */ char *phonebook_set_folder(const char *current_folder, const char *new_folder, uint8_t flags, int *err); /* * phonebook_pull should be used only to prepare pull request - prepared * request data is returned by this function. Start of fetching data from * back-end will be done only after calling phonebook_pull_read with this * returned request given as a parameter. * * phonebook_req_finalize MUST always be used to free associated resources. */ void *phonebook_pull(const char *name, const struct apparam_field *params, phonebook_cb cb, void *user_data, int *err); /* * phonebook_pull_read should be used to start getting results from back-end. * The back-end can return data as one response or can return it many parts. * After obtaining one part, PBAP core need to call phonebook_pull_read with * the same request again to get more results from back-end. * The back-end MUST return only the content based on the application * parameters requested by the client. * * Returns error code or 0 in case of success */ int phonebook_pull_read(void *request); /* * Function used to retrieve a contact from the backend. Only contacts * found in the cache are requested to the back-ends. The back-end MUST * return only the content based on the application parameters requested * by the client. * * Return value is a pointer to asynchronous request to phonebook back-end. * phonebook_req_finalize MUST always be used to free associated resources. */ void *phonebook_get_entry(const char *folder, const char *id, const struct apparam_field *params, phonebook_cb cb, void *user_data, int *err); /* * PBAP core will keep the contacts cache per folder. SetPhoneBook or * PullvCardListing can invalidate the cache if the current folder changes. * Cache will store only the necessary information required to reply to * PullvCardListing request and verify if a given contact belongs to the * source. * * Return value is a pointer to asynchronous request to phonebook back-end. * phonebook_req_finalize MUST always be used to free associated resources. */ void *phonebook_create_cache(const char *name, phonebook_entry_cb entry_cb, phonebook_cache_ready_cb ready_cb, void *user_data, int *err); /* * Finalizes request to phonebook back-end and deallocates associated * resources. Operation is canceled if not completed. This function MUST * always be used after any of phonebook_pull, phonebook_get_entry, and * phonebook_create_cache invoked. * * request is a pointer to asynchronous operation returned by phonebook_pull, * phonebook_get_entry, and phonebook_create_cache. */ void phonebook_req_finalize(void *request);