FreeCalypso > hg > fc-magnetite
diff src/ui3/mfw/mfw_BtipsFtps.c @ 420:e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 21 Jan 2018 03:09:00 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ui3/mfw/mfw_BtipsFtps.c Sun Jan 21 03:09:00 2018 +0000 @@ -0,0 +1,539 @@ +/* ========================================================= +* Texas Instruments OMAP(TM) Platform Software +* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. +* +* Use of this software is controlled by the terms and conditions found +* in the license agreement under which this software has been supplied. +* ========================================================== */ +/* + $Project name: Basic Bluetooth MMI + $Project code: + $Module: Bluetooth BMG MFW + $File: Mfw_Btips.c + $Revision: 1.0 + $Author: Texas Instruments + $Date: 26/06/07 + +******************************************************************************** + + Description: + + This module provides the BTIPS FTP Server APPlication functionality. + +******************************************************************************** + $History: Mfw_BtipsFtps.c + + 26/06/07 Sasken original version + + $End + +*******************************************************************************/ + + + + +/******************************************************************************* + + Include files + +*******************************************************************************/ + +#define ENTITY_MFW +/* includes */ + +#include <string.h> + +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" +#include "prim.h" + +#else + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif + +#ifdef FF_MMI_BTIPS_APP + +#include "osapi.h" + +/* GPF Includes */ +#include "typedefs.h" +#include "vsi.h" +//#include "../p_btt.h" + +#if BT_STACK == XA_ENABLED +#include <me.h> +#include <bttypes.h> +#include <sec.h> +#endif + +#include "btl_common.h" +#include "btl_bmg.h" +#include "debug.h" + +#include "goep.h" +#include "ftp.h" + +/* BTL inclides */ +#include "btl_ftps.h" + +#include "bthal_fs.h" + +#include "mfw_mfw.h" +#include "mfw_win.h" +#include "mfw_icn.h" /* included for mfw_mnu.h */ +#include "mfw_mnu.h" +#include "mfw_tim.h" +#include "mfw_kbd.h" +#include "mfw_sat.h" /* included for MmiDummy.h, included for MmiMenu.h */ + +#include "Mfw_Btips.h" +#include "Mfw_BtipsBmg.h" + +/* Internal Global variables for FTP Server*/ +static BtlFtpsContext *ftpsContext = 0; +static BtSecurityLevel securityLevel = BSL_NO_SECURITY; +static BD_ADDR bdAddr; + + +/**************************************************************************** + * + * Internal Function prototypes + * + ***************************************************************************/ +static void btips_ftpsCallBack(const BtlFtpsEvent *event); +#ifdef WIN32 +const char *pBT_Status(I8 Status); +#else +static const char *pBT_Status(I8 Status); +#endif +static const char *GoepOpName(GoepOperation Op); + + +/**************************************************************************** + * + * RAM data + * + ****************************************************************************/ + +#if OBEX_AUTHENTICATION == XA_ENABLED +static char realm[20]; /* OBEX realm */ +static char password[20]; /* OBEX Authentication password */ +static char userId[20]; /* OBEX Authentication userId */ +#endif /* OBEX_AUTHENTICATION == XA_ENABLED */ + +static char rootPath[80]; +static BtlFtpsObjectRequestMask objectRequestMask; +static BOOL accept; +char BTStr[20]; +/*--------------------------------------------------------------------------- + * mfw_btips_ftpsInit + *--------------------------------------------------------------------------- + * + * Synopsis: Create and Enable the FTP Server . + * + * Return: void + * + */ + +void mfw_btips_ftpsInit (void) +{ + BtStatus status; + + OS_StrCpy(realm, "MyRealm"); + OS_StrCpy(password, "MyPassword"); + OS_StrCpy(userId, "MyUserId"); + + OS_StrCpy(rootPath, "/"); + + status = BTL_FTPS_Create ((BtlAppHandle *) 0, btips_ftpsCallBack, + &securityLevel, &ftpsContext); + + Report(("BTL_FTPS_Create() returned %s.",pBT_Status(status))); + + OS_StrCpy (rootPath, BT_DEMO_FOLDER_PATH); + + status = BTL_FTPS_Enable(ftpsContext, 0, rootPath); + + Report(("BTL_FTPS_Enable() returned %s.",pBT_Status(status))); + + status = BTL_FTPS_ConfigObjectRequest ( ftpsContext, + BTL_FTPS_OBJECT_REQUEST_PUSH | + BTL_FTPS_OBJECT_REQUEST_PULL | + BTL_FTPS_OBJECT_REQUEST_DELETE ); + + Report(("BTL_FTPS_ConfigObjectRequest() returned %s.",pBT_Status(status))); + +} + +/*--------------------------------------------------------------------------- + * mfw_btips_ftpsAbort + *--------------------------------------------------------------------------- + * + * Synopsis: Requests the current operation be aborted. + * + * Return: void + * + */ +void mfw_btips_ftpsAbort(void) +{ + BtStatus status; + + status = BTL_FTPS_Abort(ftpsContext, OBRC_CONFLICT); + + Report(("BTL_FTPS_Abort() returned %s.",pBT_Status(status))); + +} + +/*--------------------------------------------------------------------------- + * mfw_btips_ftpsAcceptObjectRequest + *--------------------------------------------------------------------------- + * + * Synopsis: This function must be called after receiving object request from the client, + * in order to accept or reject the request. + * + * Return: BOOL + * + */ +void mfw_btips_ftpsAcceptObjectRequest (BOOL flag) +{ + BtStatus status; + + status = BTL_FTPS_AcceptObjectRequest (ftpsContext, flag); + + Report(("BTL_FTPS_AcceptObjectRequest() returned %s.", pBT_Status(status))); +} + +/*--------------------------------------------------------------------------- + * mfw_btips_ftpsSetSecurityLevel + *--------------------------------------------------------------------------- + * + * Synopsis: Sets security level for the given FTPS context. + * + * Return: TRUE if security level is ON, else FALSE. + * + */ +BOOL mfw_btips_ftpsSetSecurityLevel (void) +{ + BtStatus status; + BtSecurityLevel newSecurityLevel = securityLevel; + + status = BTL_FTPS_SetSecurityLevel (ftpsContext, &newSecurityLevel); + + Report(("BTL_FTPS_SetSecurityLevel() returned %s.", pBT_Status(status))); + + return TRUE; +} + + +#if OBEX_AUTHENTICATION == XA_ENABLED +/*--------------------------------------------------------------------------- + * mfw_btips_ftpsObexAuthenticationResponse + *--------------------------------------------------------------------------- + * + * Synopsis: Responde to OBEX auth. + * + * Return: void + * + */ +BOOL mfw_btips_ftpsObexAuthenticationResponse (void) +{ + BtStatus status; + + status = BTL_FTPS_ObexAuthenticationResponse (ftpsContext, userId, password); + + Report(("BTL_FTPS_ObexAuthenticationResponse() returned %s.",pBT_Status(status))); + + return ((status == BT_STATUS_SUCCESS) ? (TRUE) : (FALSE)); +} +#endif /* OBEX_AUTHENTICATION == XA_ENABLED */ + +BOOL mfw_btips_ftpsGetConnectedDevice (BD_ADDR *bdAddr, U8 *name) +{ + BtStatus status; + + status = BTL_FTPS_GetConnectedDevice (ftpsContext, bdAddr); + + if (status == BT_STATUS_SUCCESS) + { + mfw_btips_bmgGetDeviceName (bdAddr, name); + return TRUE; + } + return FALSE; +} + +void mfw_btips_ftpsDisconnect (void) +{ + BTL_FTPS_Disconnect (ftpsContext); +} + + +/*--------------------------------------------------------------------------- + * btips_ftpsCallBack + *--------------------------------------------------------------------------- + * + * Synopsis: This function processes FTP Events received from BTL, only events requested in BTL_FTPS_ConfigObjectRequest + * will be received + * Return: void + * + */ +static void btips_ftpsCallBack(const BtlFtpsEvent *event) +{ + char addr[BDADDR_NTOA_SIZE]; + T_BTIPS_MMI_IND btips_mmi_ind; + BtlBmgDeviceRecord record; + BtStatus status; + + TRACE_FUNCTION_P1("btips_ftpsCallback %d", event->ftpsEvent->event); + + btips_mmi_ind.mfwBtipsEventType = MFW_BTIPS_FTPS_EVENT; + + + /* First process only events that are not "object" related. */ + switch ( event->ftpsEvent->event) + { + case FTPS_EVENT_TP_CONNECTED: + BTL_FTPS_GetConnectedDevice(ftpsContext, &bdAddr); + TRACE_FUNCTION_P1("FTP Server: Transport Connection is up to %s.", bdaddr_ntoa(&bdAddr, addr)); + break; + + case FTPS_EVENT_TP_DISCONNECTED: + TRACE_FUNCTION(("FTP Server: Transport Connection has been disconnected.")); + break; + +#if OBEX_AUTHENTICATION == XA_ENABLED + + case FTPS_EVENT_AUTH_CHALLENGE: + TRACE_FUNCTION_P1("FTP Server: Received Authenticate Challenge for %s operation.", + GoepOpName(event->ftpsEvent->oper)); +#if OBEX_MAX_REALM_LEN > 0 + Report(("FTP Server: Realm: %s, charset %d , Options %d.", + event->ftpsEvent->info.challenge.realm+1, event->ftpsEvent->info.challenge.realm[0], event->ftpsEvent->info.challenge.options)); +#endif /* OBEX_MAX_REALM_LEN > 0 */ + + mfw_btips_ftpsObexAuthenticationResponse ( ); + break; + +#endif /* OBEX_AUTHENTICATION == XA_ENABLED */ + + case FTPS_EVENT_START: + TRACE_FUNCTION_P1("FTP Server: Receiving a %s operation.", GoepOpName(event->ftpsEvent->oper)); + break; + + case FTPS_EVENT_ABORTED: + TRACE_FUNCTION_P1("FTPServer: %s operation aborted.", GoepOpName(event->ftpsEvent->oper)); + btips_mmi_ind.data.ftpsBtEvent.event = MFW_BTIPS_FTPS_ABORTED_EVENT; + btipsNotifyMFW(&btips_mmi_ind); + break; + + case FTPS_EVENT_COMPLETE: + TRACE_FUNCTION_P1("FTPServer: %s operation complete.", GoepOpName(event->ftpsEvent->oper)); + switch(event->ftpsEvent->oper) + { + case GOEP_OPER_PUSH: + btips_mmi_ind.data.ftpsBtEvent.event = MFW_BTIPS_FTPS_PUT_COMP_EVENT; + break; + case GOEP_OPER_DELETE: + btips_mmi_ind.data.ftpsBtEvent.event = MFW_BTIPS_FTPS_DELETE_COMP_EVENT; + break; + case GOEP_OPER_CONNECT: + btips_mmi_ind.data.ftpsBtEvent.event = MFW_BTIPS_FTPS_CONNECT_EVENT; + break; + case GOEP_OPER_DISCONNECT: + btips_mmi_ind.data.ftpsBtEvent.event = MFW_BTIPS_FTPS_DISCONNECT_EVENT; + break; + } + btipsNotifyMFW(&btips_mmi_ind); + break; + + case FTPS_EVENT_OBJECT_PROGRESS: + Report(("FTPServer: %d percent of progress was complete.", + (event->ftpsEvent->info.progress.currPos/event->ftpsEvent->info.progress.maxPos)*100)); + break; + + case FTPS_EVENT_OBJECT_REQUEST: + Report(("FTP Object request : operation \"%s\".", GoepOpName(event->ftpsEvent->oper))); + Report(("FTP Object request: name \"%s\".", event->ftpsEvent->info.request.name)); + Report(("FTP Object request: length \"%d\".", event->ftpsEvent->info.request.objectLen)); + TRACE_FUNCTION("FTP Please accept or reject!"); + +#if 0 + status = BTL_BMG_DDB_FindRecord (bdAddr, &record); + if (status == BT_STATUS_SUCCESS) + { +#endif + if (event->ftpsEvent->oper == GOEP_OPER_PUSH) + { + btips_mmi_ind.data.ftpsBtEvent.event = MFW_BTIPS_FTPS_PUT_EVENT; + strcpy (btips_mmi_ind.data.ftpsBtEvent.p.ftpPutRequest.objectName, event->ftpsEvent->info.request.name); +// strcpy (btips_mmi_ind.data.ftpsBtEvent.p.ftpPutRequest.deviceName, record.name); +// btips_mmi_ind.data.ftpsBtEvent.p.ftpPutRequest.bdAddr = bdAddr; + mfw_btips_ftpsGetConnectedDevice (&(btips_mmi_ind.data.ftpsBtEvent.p.ftpPutRequest.bdAddr), btips_mmi_ind.data.ftpsBtEvent.p.ftpPutRequest.deviceName); + } + else if (event->ftpsEvent->oper == GOEP_OPER_PULL) + { + btips_mmi_ind.data.ftpsBtEvent.event = MFW_BTIPS_FTPS_GET_EVENT; + strcpy (btips_mmi_ind.data.ftpsBtEvent.p.ftpGetRequest.objectName, event->ftpsEvent->info.request.name); +// strcpy (btips_mmi_ind.data.ftpsBtEvent.p.ftpGetRequest.deviceName, record.name); +// btips_mmi_ind.data.ftpsBtEvent.p.ftpGetRequest.bdAddr = bdAddr; + mfw_btips_ftpsGetConnectedDevice (&(btips_mmi_ind.data.ftpsBtEvent.p.ftpGetRequest.bdAddr), btips_mmi_ind.data.ftpsBtEvent.p.ftpGetRequest.deviceName); + } + else if (event->ftpsEvent->oper == GOEP_OPER_DELETE) + { + btips_mmi_ind.data.ftpsBtEvent.event = MFW_BTIPS_FTPS_DELETE_EVENT; + strcpy (btips_mmi_ind.data.ftpsBtEvent.p.ftpDeleteRequest.objectName, event->ftpsEvent->info.request.name); +#if 0 + strcpy (btips_mmi_ind.data.ftpsBtEvent.p.ftpDeleteRequest.deviceName, record.name); + btips_mmi_ind.data.ftpsBtEvent.p.ftpDeleteRequest.bdAddr = bdAddr; +#endif + mfw_btips_ftpsGetConnectedDevice (&(btips_mmi_ind.data.ftpsBtEvent.p.ftpDeleteRequest.bdAddr), btips_mmi_ind.data.ftpsBtEvent.p.ftpDeleteRequest.deviceName); + } + else + { + break; + } + + btipsNotifyMFW(&btips_mmi_ind); +#if 0 + } +#endif + break; + } +} + +void mfw_btips_ftpsCallback(T_BTIPS_MMI_IND * mmiInd) +{ + MfwBtFtpsEvent ftpsBtEvent = mmiInd->data.ftpsBtEvent; + + TRACE_FUNCTION_P1("mfw_btips_ftpsCallback Event = %x", ftpsBtEvent.event); + switch(ftpsBtEvent.event) + { + case MFW_BTIPS_FTPS_PUT_EVENT: + mfw_btips_signal(E_BTIPS_FTPS_PUT_EVENT, mmiInd); + break; + + case MFW_BTIPS_FTPS_GET_EVENT: + mfw_btips_signal(E_BTIPS_FTPS_GET_EVENT, mmiInd); + break; + + case MFW_BTIPS_FTPS_DELETE_EVENT: + mfw_btips_signal(E_BTIPS_FTPS_DELETE_EVENT, mmiInd); + break; + + case MFW_BTIPS_FTPS_COMPLETE_EVENT: + mfw_btips_signal(E_BTIPS_FTPS_COMPLETE_EVENT,mmiInd); + break; + + case MFW_BTIPS_FTPS_ABORTED_EVENT: + mfw_btips_signal(E_BTIPS_FTPS_ABORTED_EVENT,mmiInd); + break; + + case MFW_BTIPS_FTPS_CONNECT_EVENT: + mfw_btips_signal(E_BTIPS_FTPS_CONNECT_EVENT,mmiInd); + break; + + case MFW_BTIPS_FTPS_DISCONNECT_EVENT: + mfw_btips_signal(E_BTIPS_FTPS_DISCONNECT_EVENT,mmiInd); + break; + + case MFW_BTIPS_FTPS_PUT_COMP_EVENT: + mfw_btips_signal(E_BTIPS_FTPS_PUT_COMP_EVENT,mmiInd); + break; + + case MFW_BTIPS_FTPS_DELETE_COMP_EVENT: + mfw_btips_signal(E_BTIPS_FTPS_DELETE_COMP_EVENT,mmiInd); + break; + + } +} + +/*--------------------------------------------------------------------------- + * GoepOpName + *--------------------------------------------------------------------------- + * + * Synopsis: Return a pointer to the name of the current server operation. + * + * Return: ASCII String pointer. + * + */ +static const char *GoepOpName(GoepOperation Op) +{ + switch (Op) { + case GOEP_OPER_PUSH: + return "Push"; + case GOEP_OPER_PULL: + return "Pull"; + case GOEP_OPER_CONNECT: + return "Connect"; + case GOEP_OPER_DISCONNECT: + return "Disconnect"; + case GOEP_OPER_SETFOLDER: + return "Set Folder"; + case GOEP_OPER_DELETE: + return "Delete"; + case GOEP_OPER_ABORT: + return "Abort"; + } + return "Unknown"; +} + +/*--------------------------------------------------------------------------- + * General Purpose Debug functions + *--------------------------------------------------------------------------- + */ +const char *pBT_Status(I8 Status) +{ + switch (Status) { + case BT_STATUS_SUCCESS: + return ("Success"); + case BT_STATUS_FAILED: + return ("Failed"); + case BT_STATUS_PENDING: + return ("Pending"); + case BT_STATUS_BUSY: + return ("Busy"); + case BT_STATUS_NO_RESOURCES: + return ("No Resources"); + case BT_STATUS_NOT_FOUND: + return ("Not Found"); + case BT_STATUS_DEVICE_NOT_FOUND: + return ("Device Not Found"); + case BT_STATUS_CONNECTION_FAILED: + return ("Connection Failed"); + case BT_STATUS_TIMEOUT: + return ("Timeout"); + case BT_STATUS_NO_CONNECTION: + return ("No Connection"); + case BT_STATUS_INVALID_PARM: + return ("Invalid parameter"); + case BT_STATUS_IN_PROGRESS: + return ("In Progress"); + case BT_STATUS_RESTRICTED: + return ("Restricted"); + case BT_STATUS_INVALID_TYPE: + return ("Invalid Type"); + case BT_STATUS_HCI_INIT_ERR: + return ("HCI Initialization Error"); + case BT_STATUS_NOT_SUPPORTED: + return ("Not Supported"); + case BT_STATUS_IN_USE: + return ("In Use"); + case BT_STATUS_SDP_CONT_STATE: + return ("SDP Continue"); + case BT_STATUS_CANCELLED: + return ("Cancelled"); + } + return ("UNKNOWN"); +} + +#endif +