PageRenderTime 60ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/peek-build/m23/EBTIPS/btl/bpp/btl_bppsnd_soapinterface.c

https://bitbucket.org/C0deMaver1ck/peeklinux
C | 1463 lines | 851 code | 131 blank | 481 comment | 108 complexity | e33950e9dba566f89c0c120391384a36 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, LGPL-2.0
  1. /*******************************************************************************\
  2. * *
  3. * TEXAS INSTRUMENTS ISRAEL PROPRIETARY AND CONFIDENTIAL INFORMATION *
  4. * *
  5. * LEGAL NOTE: THE TRANSFER OF THE TECHNICAL INFORMATION IS BEING MADE *
  6. * UNDER AN EXPORT LICENSE ISSUED BY THE ISRAELI GOVERNMENT AND THAT THE *
  7. * APPLICABLE EXPORT LICENSE DOES NOT ALLOW THE TECHNICAL INFORMATION TO *
  8. * BE USED FOR THE MODIFICATION OF THE BT ENCRYPTION OR THE DEVELOPMENT *
  9. * OF ANY NEW ENCRYPTION. THE INFORMATION CAN BE USED FOR THE INTERNAL *
  10. * DESIGN AND MANUFACTURE OF TI PRODUCTS THAT WILL CONTAIN THE BT IC. *
  11. * *
  12. \*******************************************************************************/
  13. /*******************************************************************************\
  14. *
  15. * FILE NAME: Btl_bppsnd_soapInterface.c
  16. *
  17. * DESCRIPTION: this file holds the functions that are actually insert parsed data to a Btl_Bppsnd object
  18. * depending on which function was called. this file uses the general parsing functin
  19. * which is in btl_bppsnd_soapParser.c (see the author in the file description ).
  20. *
  21. * AUTHOR: Zvi Schneider
  22. *
  23. \*******************************************************************************/
  24. #include "btl_config.h"
  25. #if BTL_CONFIG_BPPSND == BTL_CONFIG_ENABLED
  26. /********************************************************************************
  27. *
  28. * Include files
  29. *
  30. *******************************************************************************/
  31. #include "bthal_fs.h"
  32. #include "btl_defs.h"
  33. #include "Btl_bppsnd_soap.h"
  34. #include "Btl_bppsnd_soapinterface.h"
  35. BTL_LOG_SET_MODULE(BTL_LOG_MODULE_TYPE_BPPSND);
  36. /********************************************************************************
  37. *
  38. * Constants
  39. *
  40. *******************************************************************************/
  41. /*-------------------------------------------------------------------------------
  42. * BTL_BPPSND_MAX_SOAP_FILE_SIZE constant
  43. *
  44. * Represents the maximal size of soap file that a printer could send .
  45. */
  46. #define BTL_BPPSND_MAX_SOAP_FILE_SIZE (5000)
  47. /*-------------------------------------------------------------------------------
  48. * Buffer constant
  49. *
  50. * Represents the maximal size of soap file that a printer could send .
  51. */
  52. U8 buffer[BTL_BPPSND_MAX_SOAP_FILE_SIZE+1]={0};
  53. /*-------------------------------------------------------------------------------
  54. *
  55. * Represents status of internal function.
  56. */
  57. #define INTERNAL_FUNC_SUCCESS 1
  58. #define INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN 2
  59. #define INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM 3
  60. #define INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE 4
  61. #define INTERNAL_FUNC_FAILED_PARSING 5
  62. #define INTERNAL_FUNC_FAILED_OPENING_FILE 6
  63. #define INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE 7
  64. /*-------------------------------------------------------------------------------
  65. * BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE constant
  66. *
  67. * Represents defualt star value of fields in struct to see if they where changed.
  68. */
  69. #define BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE 255
  70. #define BTL_BPPSND_JOB_ATTR_DEFUALT_START_VALUE (0xFFFFFFFFUL)
  71. /********************************************************************************
  72. *
  73. * Types
  74. *
  75. *******************************************************************************/
  76. /********************************************************************************
  77. *
  78. * Dat a Structures
  79. *
  80. *******************************************************************************/
  81. /********************************************************************************
  82. *
  83. * Globals
  84. *
  85. *******************************************************************************/
  86. /********************************************************************************
  87. *
  88. * Internal function prototypes
  89. *
  90. *******************************************************************************/
  91. static U32 fromFileToBuffer(const BtlUtf8* fsPath , BtlUtf8 *buffer);
  92. static int fromBufferToObjLoc(const BtlObject *requestObj,const BtlUtf8* buffer, U16 contentLength);
  93. static int fromBufferToUIAppInstanceData(UIAppInstanceData * instanceData, const BtlObject *dataToParse);
  94. void cleanBuffer(U8 *buffToClean);
  95. /*******************************************************************************
  96. *
  97. * Function definitions
  98. *
  99. *******************************************************************************/
  100. /*-------------------------------------------------------------------------------
  101. * BTL_BPPSND_BuildReqGetPrinterAttributes()
  102. *
  103. * Initiates a BPP GetPrinterAttributes operation.
  104. * This function can be called only after connecting to the printer via
  105. * BTL_BPPSND_Connect().
  106. *
  107. * Type:
  108. * Synchronous
  109. *
  110. * Parameters:
  111. *
  112. * attributesMask [in] - Mask of printer attributes to request from the printer.
  113. * The caller should set the bits in the mask that corrsepond to features
  114. * in which it is interested. Multiple features may be Ored together.
  115. *
  116. * The pointer is free after the function returns
  117. *
  118. * responseObj [in] - describes where to place the SOAP XML response contents
  119. *
  120. * Returns:
  121. * BT_STATUS_SUCCESS - Operation is successful.
  122. *
  123. * BT_STATUS_FAILED - Unable to start the operation.
  124. *
  125. */
  126. BtStatus Btl_BppSnd_BuildGetPrinterAttributes(
  127. BtlBppsndPrinterAttributesMask attributesMask,
  128. const BtlObject *requestObj,
  129. U16 *size)
  130. {
  131. U16 contentLength = 0;
  132. BtStatus status = BT_STATUS_SUCCESS;
  133. BTL_FUNC_START("Btl_BppSnd_BuildGetPrinterAttributes");
  134. buildsoapPrinterAttrRequest(attributesMask,buffer,&contentLength);
  135. switch(fromBufferToObjLoc(requestObj, buffer, contentLength))
  136. {
  137. case INTERNAL_FUNC_SUCCESS:
  138. BTL_LOG_DEBUG(("Btl_BppSnd_BuildGetPrinterAttributes-SUCCESS WRITING TO REQUESTOBJ"));
  139. break;
  140. case INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN:
  141. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  142. ("Btl_BppSnd_BuildGetPrinterAttributes-INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN"));
  143. break;
  144. case INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM:
  145. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  146. ("Btl_BppSnd_BuildGetPrinterAttributes-INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM"));
  147. break;
  148. case INTERNAL_FUNC_FAILED_OPENING_FILE:
  149. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  150. ("Btl_BppSnd_BuildGetPrinterAttributes-INTERNAL_FUNC_FAILED_OPENING_FILE"));
  151. break;
  152. case INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE:
  153. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  154. ("Btl_BppSnd_BuildGetPrinterAttributes-INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE"));
  155. break;
  156. default:
  157. break;
  158. }
  159. *size = contentLength;
  160. BTL_FUNC_END();
  161. return status;
  162. }
  163. /*-------------------------------------------------------------------------------
  164. * BTL_BPPSND_BuildReqCreateJob()
  165. *
  166. * Initiates a BPP CreateJob operation.
  167. * This function can be called only after connecting to the printer via
  168. * BTL_BPPSND_Connect().
  169. *
  170. * Type:
  171. * Synchronous
  172. *
  173. * Parameters:
  174. *
  175. * attributesData [in] - Structure that contains create job attribute values. The caller may set
  176. * any subset of attributes that it wishes to control in the print job.
  177. * It signals those features by setting the corresponding bits in
  178. * attributesMask.
  179. * The caller may also not specify any job attribute (pass 0). In that case,
  180. * the printer will create a job using its default settings.
  181. *
  182. * The pointer is free after the function returns
  183. *
  184. * attributesMask [in] - Mask of attributes that are valid in the attributesData structure.
  185. * Multiple features may be Ored together.
  186. * If attributesData is 0, then this argument should be 0 as well
  187. *
  188. * The pointer is free after the function returns
  189. *
  190. * responseObj [in] - describes where to place the SOAP XML response contents
  191. *
  192. * Returns:
  193. * BT_STATUS_SUCCESS - Operation is successful.
  194. *
  195. * BT_STATUS_FAILED - Unable to start the operation.
  196. *
  197. * BT_STATUS_INVALID_PARM - Invalid parameters.
  198. */
  199. BtStatus Btl_BppSnd_BuildCreateJob(
  200. const BtlBppsndCreateJobRequestData *attributesData,
  201. const BtlBppsndCreateJobAttributesMask attributesMask,
  202. const BtlObject *requestObj,
  203. U16 *size)
  204. {
  205. U16 contentLength = 0;
  206. BtStatus status = BT_STATUS_SUCCESS;
  207. BTL_FUNC_START("Btl_BppSnd_BuildCreateJob");
  208. buildsoapCreateJobRequest(attributesMask , buffer, attributesData ,&contentLength);
  209. switch(fromBufferToObjLoc(requestObj, buffer, contentLength))
  210. {
  211. case INTERNAL_FUNC_SUCCESS:
  212. BTL_LOG_DEBUG(("Btl_BppSnd_BuildGetPrinterAttributes-SUCCESS WRITING TO REQUESTOBJ"));
  213. break;
  214. case INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN:
  215. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  216. ("Btl_BppSnd_BuildCreateJob-INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN"));
  217. break;
  218. case INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM:
  219. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  220. ("Btl_BppSnd_BuildCreateJob-INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM"));
  221. break;
  222. case INTERNAL_FUNC_FAILED_OPENING_FILE:
  223. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  224. ("Btl_BppSnd_BuildCreateJob-INTERNAL_FUNC_FAILED_OPENING_FILE"));
  225. break;
  226. case INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE:
  227. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  228. ("Btl_BppSnd_BuildCreateJob-INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE"));
  229. break;
  230. default:
  231. break;
  232. }
  233. *size = contentLength;
  234. BTL_FUNC_END();
  235. return status;
  236. }
  237. /*-------------------------------------------------------------------------------
  238. * BTL_BPPSND_BuildReqGetJobAttributes()
  239. *
  240. * Initiates a BPP GetJobAttributes operation.
  241. * This function can be called only after connecting to the printer via
  242. * BTL_BPPSND_Connect().
  243. *
  244. * Type:
  245. * Synchronous
  246. *
  247. * Parameters:
  248. *
  249. * jobId [in] - Job ID obtained via the response event to the corresponding BTL_BPPSND_CreateJob request
  250. *
  251. * attributesMask [in] - Mask of printer attributes to request from the printer.
  252. * The caller should set the bits in the mask that corrsepond to features
  253. * in which it is interested. Multiple features may be Ored together.
  254. *
  255. * The pointer is free after the function returns
  256. *
  257. * requestObj [in] - describes where to place the SOAP XML response contents
  258. *
  259. * Returns:
  260. * BT_STATUS_SUCCESS - Operation is successful.
  261. *
  262. * BT_STATUS_FAILED - Unable to start the operation.
  263. *
  264. * BT_STATUS_INVALID_PARM - Invalid parameters.
  265. */
  266. BtStatus Btl_BppSnd_BuildGetJobAttributes(
  267. BtlBppsndJobId jobId,
  268. const BtlBppsndGetJobAttributesMask attributesMask,
  269. const BtlObject *requestObj,
  270. U16 *size)
  271. {
  272. U16 contentLength = 0;
  273. BtStatus status = BT_STATUS_SUCCESS;
  274. BTL_FUNC_START("Btl_BppSnd_BuildGetJobAttributes");
  275. buildsoapJobAttrRequest(attributesMask, buffer,&contentLength, jobId);
  276. switch(fromBufferToObjLoc(requestObj, buffer, contentLength))
  277. {
  278. case INTERNAL_FUNC_SUCCESS:
  279. BTL_LOG_DEBUG(("Btl_BppSnd_BuildGetPrinterAttributes-SUCCESS WRITING TO REQUESTOBJ"));
  280. break;
  281. case INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN:
  282. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  283. ("Btl_BppSnd_BuildGetJobAttributes-INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN"));
  284. break;
  285. case INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM:
  286. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  287. ("Btl_BppSnd_BuildGetJobAttributes-INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM"));
  288. break;
  289. case INTERNAL_FUNC_FAILED_OPENING_FILE:
  290. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  291. ("Btl_BppSnd_BuildGetJobAttributes-INTERNAL_FUNC_FAILED_OPENING_FILE"));
  292. break;
  293. case INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE:
  294. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  295. ("Btl_BppSnd_BuildGetJobAttributes-INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE"));
  296. break;
  297. default:
  298. break;
  299. }
  300. *size = contentLength;
  301. BTL_FUNC_END();
  302. return status;
  303. }
  304. /*-------------------------------------------------------------------------------
  305. * BTL_BPPSND_BuildReqCancelJob()
  306. *
  307. * Cancels a particular print job
  308. *
  309. * Type:
  310. * Synchronous
  311. *
  312. * Parameters:
  313. *
  314. * jobId [in] - Job ID obtained via the response to the corresponding BTL_BPPSND_CreateJob request
  315. *
  316. * requestObj [in/out] - describes where to place the SOAP XML response contents
  317. *
  318. * Returns:
  319. *
  320. * BT_STATUS_SUCCESS - Operation is successful.
  321. * BT_STATUS_FAILED - Unable to start the operation.
  322. *
  323. * BT_STATUS_INVALID_PARM - Invalid parameters.
  324. */
  325. BtStatus Btl_BppSnd_BuildCancelJob(
  326. BtlBppsndJobId jobId,
  327. const BtlObject *requestObj,
  328. U16 *size)
  329. {
  330. U16 contentLength = 0;
  331. BtStatus status = BT_STATUS_SUCCESS;
  332. BTL_FUNC_START("Btl_BppSnd_BuildCancelJob");
  333. buildsoapCancelJobRequest(buffer, jobId,&contentLength);
  334. switch(fromBufferToObjLoc(requestObj, buffer, contentLength))
  335. {
  336. case INTERNAL_FUNC_SUCCESS:
  337. BTL_LOG_DEBUG(("Btl_BppSnd_BuildGetPrinterAttributes-SUCCESS WRITING TO REQUESTOBJ"));
  338. break;
  339. case INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN:
  340. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  341. ("Btl_BppSnd_BuildCancelJob-INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN"));
  342. break;
  343. case INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM:
  344. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  345. ("Btl_BppSnd_BuildCancelJob-INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM"));
  346. break;
  347. case INTERNAL_FUNC_FAILED_OPENING_FILE:
  348. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  349. ("Btl_BppSnd_BuildCancelJob-INTERNAL_FUNC_FAILED_OPENING_FILE"));
  350. break;
  351. case INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE:
  352. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  353. ("Btl_BppSnd_BuildCancelJob-INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE"));
  354. break;
  355. default:
  356. break;
  357. }
  358. *size = contentLength;
  359. BTL_FUNC_END();
  360. return status;
  361. }
  362. /*-------------------------------------------------------------------------------
  363. * BTL_BPPSND_BuildReqStartGetEvent()
  364. *
  365. * Starts a GetEvent operation on the status channel.
  366. *
  367. * Only a single operation may execute on the status channel simultaneously. The GetEvent
  368. * allows monitoring of the state of a specific job (identified by its jobId).
  369. *
  370. * The application callback will be signalled with the new printer & job status whenever there is
  371. * a change in their state.
  372. *
  373. * The application should call BTL_BPPSND_StopGetEvent to stop monitoring the state. The monitoring will also
  374. * stop upon a call to any of the following functions: BTL_BPPSND_GetJobAttributes, BTL_BPPSND_CancelJob, and
  375. * BTL_BPPSND_GetPrinterAttributes. Whenever monitoring stops, a corresponding event shall be sent to the
  376. * application callback.
  377. *
  378. * Type:
  379. * Synchronous
  380. *
  381. * Parameters:
  382. *
  383. * jobId [in] - Job ID obtained via the response to the corresponding BTL_BPPSND_CreateJob request
  384. *
  385. * requestObj [in] - describes where to place the SOAP XML response contents
  386. *
  387. * Returns:
  388. * BT_STATUS_SUCCESS - Operation is successful.
  389. *
  390. * BT_STATUS_FAILED - Unable to start the operation.
  391. *
  392. * BT_STATUS_INVALID_PARM - Invalid parameters.
  393. */
  394. BtStatus Btl_BppSnd_BuildStartGetEvent(
  395. BtlBppsndJobId jobId,
  396. const BtlObject *requestObj,
  397. U16 *size)
  398. {
  399. U16 contentLength = 0;
  400. BtStatus status = BT_STATUS_SUCCESS;
  401. BTL_FUNC_START("Btl_BppSnd_BuildStartGetEvent");
  402. buildsoapGetEventRequest(buffer, jobId,&contentLength);
  403. switch(fromBufferToObjLoc(requestObj, buffer, contentLength))
  404. {
  405. case INTERNAL_FUNC_SUCCESS:
  406. BTL_LOG_DEBUG(("Btl_BppSnd_BuildGetPrinterAttributes-SUCCESS WRITING TO REQUESTOBJ"));
  407. break;
  408. case INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN:
  409. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  410. ("Btl_BppSnd_BuildStartGetEvent-INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN"));
  411. break;
  412. case INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM:
  413. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  414. ("Btl_BppSnd_BuildStartGetEvent-INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM"));
  415. break;
  416. case INTERNAL_FUNC_FAILED_OPENING_FILE:
  417. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  418. ("Btl_BppSnd_BuildStartGetEvent-INTERNAL_FUNC_FAILED_OPENING_FILE"));
  419. break;
  420. case INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE:
  421. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  422. ("Btl_BppSnd_BuildStartGetEvent-INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE"));
  423. break;
  424. default:
  425. break;
  426. }
  427. *size = contentLength;
  428. BTL_FUNC_END();
  429. return status;
  430. }
  431. /*-------------------------------------------------------------------------------
  432. * Btl_BppSnd_ParseGetPrinterAttributesResponse()
  433. *
  434. * Parse a SOAP XML GetPrinterAttributes response
  435. *
  436. * This function parses the response, and sets the available attribute values in
  437. * attributesData.
  438. *
  439. * The function returns an attributesMask that indicates which values are present
  440. * in attributesData. Only those attributes for which the corresponding bit is set in
  441. * attributesMask should be accessed in attributesData. The values of all other
  442. * attributes is undefined.
  443. *
  444. * Type:
  445. * Synchronous
  446. *
  447. * Parameters:
  448. *
  449. * dataToParse [in] - describes XML response information
  450. *
  451. * printerAttributesMask [in] - Indicates which attributes of the printer is needed
  452. *
  453. * printerAttributes [out] - Contains the values of the present attributes.
  454. *
  455. * printerAttributesMaskFound [out] - Indicates which attributes in printerAttributes are valid ,the value is zero when sent!
  456. *
  457. * Returns:
  458. * BT_STATUS_SUCCESS - Operation is successful.
  459. *
  460. * BT_STATUS_FAILED - The operation failed.
  461. */
  462. BtStatus Btl_BppSnd_ParseGetPrinterAttributesResponse(
  463. const BtlObject *dataToParse,
  464. BtlBppsndPrinterAttributes *printerAttributes,
  465. const BtlBppsndPrinterAttributesMask printerAttributesMask,
  466. BtlBppsndPrinterAttributesMask *printerAttributesMaskFound )
  467. {
  468. BtStatus status = BT_STATUS_SUCCESS;
  469. BOOL allAttr = FALSE;
  470. int i=0,length=0;
  471. UIAppInstanceData instanceData={0}; /* set at start to 0 */
  472. BTL_FUNC_START("Btl_BppSnd_ParseGetPrinterAttributesResponse");
  473. /* the value of state and stateReason set to dufualt because 0 is legit value for them*/
  474. instanceData.btAppBppInstanceData.printerState = BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE;
  475. instanceData.btAppBppInstanceData.printerStateReason = BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE;
  476. instanceData.btAppBppInstanceData.colorSupported = BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE;
  477. instanceData.btAppBppInstanceData.queuedJobCount = BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE;
  478. instanceData.btAppBppInstanceData.basicTextPageWidth= BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE;
  479. instanceData.btAppBppInstanceData.basicTextPageHeight= BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE;
  480. switch(fromBufferToUIAppInstanceData(&instanceData,dataToParse))
  481. {
  482. case INTERNAL_FUNC_SUCCESS:
  483. BTL_LOG_DEBUG(("Btl_BppSnd_ParseGetPrinterAttributesResponse-SUCCESS READING FROM BUFFER"));
  484. break;
  485. case INTERNAL_FUNC_FAILED_OPENING_FILE:
  486. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  487. ("Btl_BppSnd_ParseGetPrinterAttributesResponse-INTERNAL_FUNC_FAILED_OPENING_FILE"));
  488. break;
  489. case INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE:
  490. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  491. ("Btl_BppSnd_ParseGetPrinterAttributesResponse-INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE"));
  492. break;
  493. case INTERNAL_FUNC_FAILED_PARSING:
  494. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  495. ("Btl_BppSnd_ParseGetPrinterAttributesResponse-INTERNAL_FUNC_FAILED_PARSING"));
  496. break;
  497. default:
  498. break;
  499. }
  500. printerAttributes->operationStatus = (BtlBppsndJobOperationStatus)instanceData.btAppBppInstanceData.operationStatus;
  501. if((printerAttributesMask & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_ALL) == BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_ALL)
  502. {
  503. allAttr = TRUE;
  504. }
  505. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINTER_NAME))
  506. {
  507. if(*instanceData.btAppBppInstanceData.printerName != '\0')
  508. {
  509. OS_StrnCpy( (char*)printerAttributes->printerName,
  510. (char*)instanceData.btAppBppInstanceData.printerName,
  511. BTL_BPPSND_MAX_PRINTER_NAME_LEN);
  512. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINTER_NAME;
  513. }
  514. }
  515. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINTER_LOCATION))
  516. {
  517. if(*instanceData.btAppBppInstanceData.printerLocation!= '\0')
  518. {
  519. OS_StrnCpy((char*)printerAttributes->printerLocation,
  520. (char*)instanceData.btAppBppInstanceData.printerLocation,
  521. BTL_BPPSND_MAX_PRINTER_LOCATION_LEN);
  522. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINTER_LOCATION;
  523. }
  524. }
  525. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINTER_STATE))
  526. {
  527. if(!(instanceData.btAppBppInstanceData.printerState == BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE))
  528. {
  529. printerAttributes->printerState = (BtlBppsndPrinterState)(instanceData.btAppBppInstanceData.printerState + 1);
  530. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINTER_STATE;
  531. }
  532. }
  533. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINTER_STATE_REASONS))
  534. {
  535. if(!(instanceData.btAppBppInstanceData.printerStateReason == BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE))
  536. {
  537. printerAttributes->printerStateReasons = (BtlBppsndPrinterStateReasons)(instanceData.btAppBppInstanceData.printerStateReason + 1);
  538. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINTER_STATE_REASONS;
  539. }
  540. }
  541. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_DOCUMENT_FORMATS_SUPPORTED))
  542. {
  543. /*while((j<BTL_BPPSND_NUM_OF_DOCUMENT_FORMATS)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_DOCUMENT_FORMATS))
  544. {
  545. if(instanceData.btAppBppInstanceData.documentFormat& mask)
  546. {
  547. OS_StrnCpy(printerAttributes->documentFormatsSupported[i], documentFormatArr[j], BTL_BPPSND_MAX_DOCUMENT_FORMAT_LEN);
  548. i++;
  549. }
  550. mask = mask*2;
  551. j++;
  552. }
  553. j=0;
  554. mask = 1;
  555. if(i>0)
  556. {
  557. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_DOCUMENT_FORMATS_SUPPORTED;
  558. }
  559. printerAttributes->numDocumentFormatsSupported = i;
  560. i=0;*/
  561. i=0;
  562. length = instanceData.btAppBppInstanceData.numDocumentFormatsSupported;
  563. while(i<length)
  564. {
  565. OS_StrnCpy((char*)printerAttributes->documentFormatsSupported[i],
  566. (char*)instanceData.btAppBppInstanceData.documentFormatsSupported[i],
  567. BTL_BPPSND_MAX_DOCUMENT_FORMAT_LEN);
  568. BTL_LOG_DEBUG(("DocumentFormat-Supported: %s ",printerAttributes->documentFormatsSupported[i]));
  569. i++;
  570. }
  571. if(i>0)
  572. {
  573. (*printerAttributesMaskFound) +=BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_DOCUMENT_FORMATS_SUPPORTED;
  574. }
  575. printerAttributes->numDocumentFormatsSupported = (U32)i;
  576. i = 0;
  577. length = 0;
  578. }
  579. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_COLOR_SUPPORTED))
  580. {
  581. if(instanceData.btAppBppInstanceData.colorSupported == 1)
  582. {
  583. printerAttributes->isColorSupported = TRUE;
  584. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_COLOR_SUPPORTED;
  585. }
  586. else if(instanceData.btAppBppInstanceData.colorSupported == 0)
  587. {
  588. printerAttributes->isColorSupported = FALSE;
  589. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_COLOR_SUPPORTED;
  590. }
  591. }
  592. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_MAX_COPIES_SUPPORTED))
  593. {
  594. if(!(instanceData.btAppBppInstanceData.maxCopies == '\0'))
  595. {
  596. printerAttributes->maxCopiesSupported= (U32)OS_AtoU32((char*)&(instanceData.btAppBppInstanceData.maxCopies));
  597. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_MAX_COPIES_SUPPORTED;
  598. }
  599. }
  600. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_SIDES_SUPPORTED))
  601. {
  602. if((instanceData.btAppBppInstanceData.sides & ONE_SIDED_MASK)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_SIDES))
  603. {
  604. printerAttributes->sidesSupported[i] = BTL_BPPSND_PRINT_SIDES_ONE_SIDED;
  605. i++;
  606. }
  607. if((instanceData.btAppBppInstanceData.sides & TWO_SIDED_LONG_MASK)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_SIDES))
  608. {
  609. printerAttributes->sidesSupported[i] = BTL_BPPSND_PRINT_SIDES_TWO_SIDED_LONG_EDGE;
  610. i++;
  611. }
  612. if((instanceData.btAppBppInstanceData.sides & TWO_SIDED_SHORT_MASK)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_SIDES))
  613. {
  614. printerAttributes->sidesSupported[i] = BTL_BPPSND_PRINT_SIDES_TWO_SIDED_SHORT_EDGE;
  615. i++;
  616. }
  617. if(i>0)
  618. {
  619. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_SIDES_SUPPORTED;
  620. }
  621. printerAttributes->numSidesSupported = (U32)i;
  622. i=0;
  623. }
  624. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_NUMBER_UP_SUPPORTED))
  625. {
  626. if(!(instanceData.btAppBppInstanceData.numberUp == '\0'))
  627. {
  628. printerAttributes->NumberUpSupported = (U32)OS_AtoU32((char*)&(instanceData.btAppBppInstanceData.numberUp));
  629. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_NUMBER_UP_SUPPORTED;
  630. }
  631. }
  632. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_ORIENTATIONS_SUPPORTED))
  633. {
  634. if((instanceData.btAppBppInstanceData.orientation & PORTRAIT_MASK)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_ORIENTATIONS))
  635. {
  636. printerAttributes->orientationsSupported[i] = BTL_BPPSND_PRINT_ORIENTATION_PORTRAIT;
  637. i++;
  638. }
  639. if((instanceData.btAppBppInstanceData.orientation & LANDSCAPE_MASK)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_ORIENTATIONS))
  640. {
  641. printerAttributes->orientationsSupported[i] = BTL_BPPSND_PRINT_ORIENTATION_LANDSCAPE;
  642. i++;
  643. }
  644. if((instanceData.btAppBppInstanceData.orientation & REVERSE_LANDSCAPE_MASK)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_ORIENTATIONS))
  645. {
  646. printerAttributes->orientationsSupported[i] = BTL_BPPSND_PRINT_ORIENTATION_REVERSE_LANDSCAPE;
  647. i++;
  648. }
  649. if((instanceData.btAppBppInstanceData.orientation & REVERSE_PORTRAIT_MASK)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_ORIENTATIONS))
  650. {
  651. printerAttributes->orientationsSupported[i] = BTL_BPPSND_PRINT_ORIENTATION_REVERSE_PORTRAIT;
  652. i++;
  653. }
  654. if(i>0)
  655. {
  656. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_ORIENTATIONS_SUPPORTED;
  657. }
  658. printerAttributes->NumberorientationsSupported = (U32)i;
  659. i =0;
  660. }
  661. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_MEDIA_SIZES_SUPPORTED))
  662. {
  663. i=0;
  664. /*while((j<BTL_BPPSND_NUM_OF_MEDIA_SIZES)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_MEDIA_SIZES))
  665. {
  666. if(instanceData.btAppBppInstanceData.supportedMediaTypes & mask)
  667. {
  668. OS_StrnCpy(printerAttributes->mediaSizesSupported[i], mediaSizeArr[j], BTL_BPPSND_MAX_MEDIA_SIZE_LEN);
  669. i++;
  670. }
  671. mask = mask*2;
  672. j++;
  673. }
  674. j=0;
  675. mask = 1;
  676. if(i>0)
  677. {
  678. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_MEDIA_SIZES_SUPPORTED;
  679. }
  680. printerAttributes->numMediaSizesSupported = (U32)i;
  681. i=0;*/
  682. length = instanceData.btAppBppInstanceData.numMediaSizesSupported;
  683. while(i<length)
  684. {
  685. OS_StrnCpy((char*)printerAttributes->mediaSizesSupported[i],
  686. (char*)instanceData.btAppBppInstanceData.mediaSizesSupported[i],
  687. BTL_BPPSND_MAX_MEDIA_SIZE_LEN);
  688. BTL_LOG_DEBUG(("MediaSize-Supported: %s ",printerAttributes->mediaSizesSupported[i]));
  689. i++;
  690. }
  691. if(i>0)
  692. {
  693. (*printerAttributesMaskFound) +=BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_MEDIA_SIZES_SUPPORTED;
  694. }
  695. printerAttributes->numMediaSizesSupported = (U32)i;
  696. i = 0;
  697. length = 0;
  698. }
  699. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_MEDIA_TYPES_SUPPORTED)){
  700. /*while((j<BTL_BPPSND_NUM_OF_MEDIA_TYPES)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_MEDIA_TYPES))
  701. {
  702. if(instanceData.btAppBppInstanceData.supportedMediaTypes & mask)
  703. {
  704. OS_StrnCpy(printerAttributes->mediaTypesSupported[i], mediaTypeArr[j], BTL_BPPSND_MAX_MEDIA_TYPE_LEN);
  705. i++;
  706. }
  707. mask = mask*2;
  708. j++;
  709. }
  710. j=0;
  711. mask = 1;
  712. if(i>0)
  713. {
  714. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_MEDIA_TYPES_SUPPORTED;
  715. }
  716. printerAttributes->numMediaTypesSupported = (U32)i;
  717. i=0;*/
  718. i=0;
  719. length = instanceData.btAppBppInstanceData.numMediaTypesSupported;
  720. while(i<length)
  721. {
  722. OS_StrnCpy((char*)printerAttributes->mediaTypesSupported[i],
  723. (char*)instanceData.btAppBppInstanceData.mediaTypesSupported[i],
  724. BTL_BPPSND_MAX_MEDIA_TYPE_LEN);
  725. BTL_LOG_DEBUG(("MediaType-Supported: %s ",printerAttributes->mediaTypesSupported[i]));
  726. i++;
  727. }
  728. if(i>0)
  729. {
  730. (*printerAttributesMaskFound) +=BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_MEDIA_TYPES_SUPPORTED;
  731. }
  732. printerAttributes->numMediaTypesSupported = (U32)i;
  733. i = 0;
  734. length = 0;
  735. }
  736. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_MEDIA_LOADED))
  737. {
  738. length = instanceData.btAppBppInstanceData.numMediaLoaded;
  739. while(i<length)
  740. {
  741. OS_StrnCpy((char*)printerAttributes->mediaLoadedDetails[i].LoadedMediumSize,
  742. (char*)instanceData.btAppBppInstanceData.mediaLoadedDetails[i].LoadedMediumSize,
  743. BTL_BPPSND_MAX_MEDIA_SIZE_LEN);
  744. OS_StrnCpy((char*)printerAttributes->mediaLoadedDetails[i].LoadedMediumType,
  745. (char*)instanceData.btAppBppInstanceData.mediaLoadedDetails[i].LoadedMediumType,
  746. BTL_BPPSND_MAX_MEDIA_TYPE_LEN);
  747. BTL_LOG_DEBUG(("MediaDetailes---:\nMedia-Size: %s \nMedia-Type: %s",printerAttributes->mediaLoadedDetails[i].LoadedMediumSize
  748. ,printerAttributes->mediaLoadedDetails[i].LoadedMediumType));
  749. i++;
  750. }
  751. if(i>0)
  752. {
  753. (*printerAttributesMaskFound) +=BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_MEDIA_LOADED;
  754. }
  755. printerAttributes->numMediaLoaded= (U32)i;
  756. i = 0;
  757. length = 0;
  758. }
  759. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINT_QUALITY_SUPPORTED))
  760. {
  761. if((instanceData.btAppBppInstanceData.printfQuality & DRAFT_MASK)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_PRINT_QUALITY))
  762. {
  763. printerAttributes->PrintQualitySupported[i] = BTL_BPPSND_PRINT_QUALITY_DRAFT;
  764. i++;
  765. }
  766. if((instanceData.btAppBppInstanceData.printfQuality & NORMAL_MASK)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_PRINT_QUALITY))
  767. {
  768. printerAttributes->PrintQualitySupported[i] = BTL_BPPSND_PRINT_QUALITY_NORMAL;
  769. i++;
  770. }
  771. if((instanceData.btAppBppInstanceData.printfQuality & HIGH_MASK)&&(i<BTL_BPPSND_MAX_NUM_OF_SUPPORTED_PRINT_QUALITY))
  772. {
  773. printerAttributes->PrintQualitySupported[i] = BTL_BPPSND_PRINT_QUALITY_HIGH;
  774. i++;
  775. }
  776. if(i>0)
  777. {
  778. (*printerAttributesMaskFound) +=BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINT_QUALITY_SUPPORTED;
  779. }
  780. printerAttributes->numPrintQualitySupported= (U32)i;
  781. i=0;
  782. }
  783. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_IMAGE_FORMATS_SUPPORTED))
  784. {
  785. length = instanceData.btAppBppInstanceData.numImageFormatsSupported;
  786. while(i<length)
  787. {
  788. OS_StrnCpy((char*)printerAttributes->imageFormatsSupported[i],
  789. (char*)instanceData.btAppBppInstanceData.imageFormatsSupported[i],
  790. BTL_BPPSND_MAX_IMAGE_FORMAT_LEN);
  791. BTL_LOG_DEBUG(("Image-Format: %s ",printerAttributes->imageFormatsSupported[i]));
  792. i++;
  793. }
  794. if(i>0)
  795. {
  796. (*printerAttributesMaskFound) +=BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_IMAGE_FORMATS_SUPPORTED;
  797. }
  798. printerAttributes->numImageFormatsSupported= (U32)i;
  799. i = 0;
  800. length = 0;
  801. }
  802. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_BASIC_TEXT_PAGE_WIDTH))
  803. {
  804. if(!(instanceData.btAppBppInstanceData.basicTextPageWidth== BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE))
  805. {
  806. printerAttributes->basicTextPageWidth= instanceData.btAppBppInstanceData.basicTextPageWidth;
  807. (*printerAttributesMaskFound) +=BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_BASIC_TEXT_PAGE_WIDTH;
  808. }
  809. }
  810. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_BASIC_TEXT_PAGE_HEIGHT))
  811. {
  812. if(!(instanceData.btAppBppInstanceData.basicTextPageHeight== BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE))
  813. {
  814. printerAttributes->basicTextPageHeight= instanceData.btAppBppInstanceData.basicTextPageHeight;
  815. (*printerAttributesMaskFound) +=BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_BASIC_TEXT_PAGE_HEIGHT;
  816. }
  817. }
  818. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINTER_GENERAL_CURRENT_OPERATOR))
  819. {
  820. if(!(instanceData.btAppBppInstanceData.printerGeneralCurrentOperator == '\0'))
  821. {
  822. OS_StrnCpy((char*)printerAttributes->printerGeneralCurrentOperator,
  823. (char*)instanceData.btAppBppInstanceData.printerGeneralCurrentOperator,
  824. BTL_BPPSND_MAX_PRINTER_GENERAL_CURRENT_OPERATOR);
  825. (*printerAttributesMaskFound) += BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_PRINTER_GENERAL_CURRENT_OPERATOR;
  826. }
  827. }
  828. if((allAttr)||((printerAttributesMask) & BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_QUEUED_JOB_COUNT))
  829. {
  830. if(!(instanceData.btAppBppInstanceData.queuedJobCount == BTL_BPPSND_PRINTER_ATTR_DEFUALT_START_VALUE))
  831. {
  832. printerAttributes->queuedJobCount = instanceData.btAppBppInstanceData.queuedJobCount;
  833. (*printerAttributesMaskFound) +=BTL_BPPSND_PRINTER_ATTRIBUTE_MASK_QUEUED_JOB_COUNT;
  834. }
  835. }
  836. BTL_FUNC_END();
  837. return status;
  838. }
  839. /*-------------------------------------------------------------------------------
  840. * Btl_BppSnd_ParseCreateJobResponse()
  841. *
  842. * Parse a SOAP XML CreateJob response
  843. *
  844. * This function parses the response, and sets the available attribute values in
  845. * attributesData.
  846. *
  847. * Type:
  848. * Synchronous
  849. *
  850. * Parameters:
  851. *
  852. * dataToParse [in] - describes XML response information
  853. *
  854. * attributesData [out] - Contains the values of the response attributes.
  855. *
  856. * Returns:
  857. * BT_STATUS_SUCCESS - Operation is successful.
  858. *
  859. * BT_STATUS_FAILED - The operation failed.
  860. */
  861. BtStatus Btl_BppSnd_ParseCreateJobResponse(
  862. const BtlObject *dataToParse,
  863. BtlBppsndCreateJobResponseData *attributesData)
  864. {
  865. BtStatus status = BT_STATUS_SUCCESS;
  866. UIAppInstanceData instanceData={0}; /* set at start to 0 */
  867. BTL_FUNC_START("Btl_BppSnd_ParseCreateJobResponse");
  868. switch(fromBufferToUIAppInstanceData(&instanceData,dataToParse))
  869. {
  870. case INTERNAL_FUNC_SUCCESS:
  871. BTL_LOG_DEBUG(("Btl_BppSnd_ParseCreateJobResponse-SUCCESS READING FROM BUFFER"));
  872. break;
  873. case INTERNAL_FUNC_FAILED_OPENING_FILE:
  874. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED, ("Btl_BppSnd_ParseCreateJobResponse-INTERNAL_FUNC_FAILED_OPENING_FILE"));
  875. break;
  876. case INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE:
  877. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED, ("Btl_BppSnd_ParseCreateJobResponse-INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE"));
  878. break;
  879. case INTERNAL_FUNC_FAILED_PARSING:
  880. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED, ("Btl_BppSnd_ParseCreateJobResponse-INTERNAL_FUNC_FAILED_PARSING"));
  881. break;
  882. default:
  883. break;
  884. }
  885. attributesData->jobId = (U32)instanceData.btAppBppInstanceData.jobId;
  886. attributesData->operationStatus = (BtlBppsndJobOperationStatus)instanceData.btAppBppInstanceData.operationStatus;
  887. BTL_FUNC_END();
  888. return status;
  889. }
  890. /*-------------------------------------------------------------------------------
  891. * Btl_BppSnd_ParseGetJobAttributesResponse()
  892. *
  893. * Parse a SOAP XML GetJobAttributes response
  894. *
  895. * This function parses the response, and sets the available attribute values in
  896. * attributesData.
  897. *
  898. * The function returns an attributesMask that indicates which values are present
  899. * in attributesData. Only those attributes for which the corresponding bit is set in
  900. * attributesMask should be accessed in attributesData. The values of all other
  901. * attributes is undefined.
  902. *
  903. * Type:
  904. * Synchronous
  905. *
  906. * Parameters:
  907. * dataToParse [in] - describes XML response information.
  908. * attributesData [out] - Contains the values of the present attributes.
  909. * attributesMask [in] - Indicates which attributes in attributesData are valid.
  910. * jobAttributesMaskFound[out] - Indicates the attributes that was actually found.
  911. *
  912. * Returns:
  913. * BT_STATUS_SUCCESS - Operation is successful.
  914. *
  915. * BT_STATUS_FAILED - The operation failed.
  916. */
  917. BtStatus Btl_BppSnd_ParseGetJobAttributesResponse(
  918. const BtlObject *dataToParse,
  919. BtlBppsndGetJobAttributesResponseData *attributesData,
  920. BtlBppsndGetJobAttributesMask attributesMask,
  921. BtlBppsndGetJobAttributesMask *jobAttributesMaskFound)
  922. {
  923. BtStatus status = BT_STATUS_SUCCESS;
  924. BOOL allAttr = FALSE, stateFound = FALSE;
  925. UIAppInstanceData instanceData={0}; /* set at start to 0 */
  926. BTL_FUNC_START("Btl_BppSnd_ParseGetJobAttributesResponse");
  927. /* these values are set to dufualt because 0 is legit value for them*/
  928. instanceData.btAppBppInstanceData.jobMediaSheetsCompleted = BTL_BPPSND_JOB_ATTR_DEFUALT_START_VALUE; /* to differ zero from no answer */
  929. instanceData.btAppBppInstanceData.numOfInterveningJobs = BTL_BPPSND_JOB_ATTR_DEFUALT_START_VALUE;/* to differ zero from no answer */
  930. instanceData.btAppBppInstanceData.jobId =BTL_BPPSND_JOB_ATTR_DEFUALT_START_VALUE;/* to differ zero from no answer */
  931. switch(fromBufferToUIAppInstanceData(&instanceData,dataToParse))
  932. {
  933. case INTERNAL_FUNC_SUCCESS:
  934. BTL_LOG_DEBUG(("Btl_BppSnd_ParseGetJobAttributesResponse-SUCCESS READING FROM BUFFER"));
  935. break;
  936. case INTERNAL_FUNC_FAILED_OPENING_FILE:
  937. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  938. ("Btl_BppSnd_ParseGetJobAttributesResponse-INTERNAL_FUNC_FAILED_OPENING_FILE"));
  939. break;
  940. case INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE:
  941. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  942. ("Btl_BppSnd_ParseGetJobAttributesResponse-INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE"));
  943. break;
  944. case INTERNAL_FUNC_FAILED_PARSING:
  945. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  946. ("Btl_BppSnd_ParseGetJobAttributesResponse-INTERNAL_FUNC_FAILED_PARSING"));
  947. break;
  948. default:
  949. break;
  950. }
  951. attributesData->operationStatus = (BtlBppsndJobOperationStatus)instanceData.btAppBppInstanceData.operationStatus;
  952. if((attributesMask & BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_ALL )== BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_ALL)
  953. {
  954. allAttr = TRUE;
  955. }
  956. if(allAttr||((attributesMask) & BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_JOB_STATE))
  957. {
  958. if(OS_StrCmp((char*)instanceData.btAppBppInstanceData.jobState,"printing")==0)
  959. {
  960. attributesData->jobState = BTL_BPPSND_JOB_STATE_PRINTING;
  961. stateFound =TRUE;
  962. }
  963. else if(OS_StrCmp((char*)instanceData.btAppBppInstanceData.jobState,"waiting")==0)
  964. {
  965. attributesData->jobState = BTL_BPPSND_JOB_STATE_WAITING;
  966. stateFound =TRUE;
  967. }
  968. else if(OS_StrCmp((char*)instanceData.btAppBppInstanceData.jobState,"stopped")==0)
  969. {
  970. attributesData->jobState = BTL_BPPSND_JOB_STATE_STOPPED;
  971. stateFound =TRUE;
  972. }
  973. else if(OS_StrCmp((char*)instanceData.btAppBppInstanceData.jobState,"completed")==0)
  974. {
  975. attributesData->jobState = BTL_BPPSND_JOB_STATE_COMPLETED;
  976. stateFound =TRUE;
  977. }
  978. else if(OS_StrCmp((char*)instanceData.btAppBppInstanceData.jobState,"aborted")==0)
  979. {
  980. attributesData->jobState = BTL_BPPSND_JOB_STATE_ABORTED;
  981. stateFound =TRUE;
  982. }
  983. else if(OS_StrCmp((char*)instanceData.btAppBppInstanceData.jobState,"cancelled")==0)
  984. {
  985. attributesData->jobState = BTL_BPPSND_JOB_STATE_CANCELLED;
  986. stateFound =TRUE;
  987. }
  988. else if(OS_StrCmp((char*)instanceData.btAppBppInstanceData.jobState,"unknown")==0)
  989. {
  990. attributesData->jobState = BTL_BPPSND_JOB_STATE_UNKNOWN;
  991. stateFound =TRUE;
  992. }
  993. if(stateFound)
  994. {
  995. (*jobAttributesMaskFound) += BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_JOB_STATE;
  996. }
  997. }
  998. if(allAttr||((attributesMask) & BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_JOB_NAME))
  999. {
  1000. if(*instanceData.btAppBppInstanceData.jobName != '\0')
  1001. {
  1002. OS_StrnCpy((char*)attributesData->jobName,
  1003. (char*)instanceData.btAppBppInstanceData.jobName,
  1004. BTL_BPPSND_MAX_JOB_NAME_LEN);
  1005. (*jobAttributesMaskFound) += BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_JOB_NAME;
  1006. }
  1007. }
  1008. if(allAttr||((attributesMask) & BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_JOB_ORIGINATING_USER_NAME))
  1009. {
  1010. if(*instanceData.btAppBppInstanceData.jobOriginatingUserName!= '\0')
  1011. {
  1012. OS_StrnCpy((char*)attributesData->jobOriginatingUserName,
  1013. (char*)instanceData.btAppBppInstanceData.jobOriginatingUserName,
  1014. BTL_BPPSND_MAX_JOB_ORIGINATING_USER_NAME_LEN);
  1015. (*jobAttributesMaskFound) += BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_JOB_ORIGINATING_USER_NAME;
  1016. }
  1017. }
  1018. if(allAttr||((attributesMask) & BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_JOB_MEDIA_SHEETS_COMPLETED))
  1019. {
  1020. if(instanceData.btAppBppInstanceData.jobMediaSheetsCompleted != BTL_BPPSND_JOB_ATTR_DEFUALT_START_VALUE)
  1021. {
  1022. attributesData->jobMediaSheetsCompleted = instanceData.btAppBppInstanceData.jobMediaSheetsCompleted;
  1023. (*jobAttributesMaskFound) += BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_JOB_MEDIA_SHEETS_COMPLETED;
  1024. }
  1025. }
  1026. if(allAttr||((attributesMask) & BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_NUM_OF_INTERVENING_JOBS))
  1027. {
  1028. if(instanceData.btAppBppInstanceData.numOfInterveningJobs != BTL_BPPSND_JOB_ATTR_DEFUALT_START_VALUE)
  1029. {
  1030. attributesData->numOfInterveningJobs = instanceData.btAppBppInstanceData.numOfInterveningJobs;
  1031. (*jobAttributesMaskFound) += BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_NUM_OF_INTERVENING_JOBS;
  1032. }
  1033. }
  1034. if(allAttr||((attributesMask) & BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_JOB_ID))
  1035. {
  1036. if(instanceData.btAppBppInstanceData.jobId != BTL_BPPSND_JOB_ATTR_DEFUALT_START_VALUE)
  1037. {
  1038. attributesData->jobId = instanceData.btAppBppInstanceData.jobId;
  1039. (*jobAttributesMaskFound) += BTL_BPPSND_GET_JOB_ATTRIBUTE_MASK_JOB_ID;
  1040. }
  1041. }
  1042. BTL_FUNC_END();
  1043. return status;
  1044. }
  1045. /*-------------------------------------------------------------------------------
  1046. * Btl_BppSnd_ParseCancelJobResponse()
  1047. *
  1048. * Parse a SOAP XML CancelJob response
  1049. *
  1050. * This function parses the response, and sets the available attribute values in
  1051. * attributesData.
  1052. *
  1053. * Type:
  1054. * Synchronous
  1055. *
  1056. * Parameters:
  1057. * dataToParse [in] - describes XML response information
  1058. *
  1059. * attributesData [out] - Contains the values of the response attributes.
  1060. *
  1061. * Returns:
  1062. * BT_STATUS_SUCCESS - Operation is successful.
  1063. *
  1064. * BT_STATUS_FAILED - The operation failed.
  1065. */
  1066. BtStatus Btl_BppSnd_ParseCancelJobResponse(
  1067. const BtlObject *dataToParse,
  1068. BtlBppsndCancelJobResponseData *attributesData)
  1069. {
  1070. BtStatus status = BT_STATUS_SUCCESS;
  1071. UIAppInstanceData instanceData={0}; /* set at start to 0 */
  1072. BTL_FUNC_START("Btl_BppSnd_ParseCancelJobResponse");
  1073. switch(fromBufferToUIAppInstanceData(&instanceData,dataToParse))
  1074. {
  1075. case INTERNAL_FUNC_SUCCESS:
  1076. BTL_LOG_DEBUG(("Btl_BppSnd_ParseCancelJobResponse-SUCCESS READING FROM BUFFER"));
  1077. break;
  1078. case INTERNAL_FUNC_FAILED_OPENING_FILE:
  1079. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  1080. ("Btl_BppSnd_ParseCancelJobResponse-INTERNAL_FUNC_FAILED_OPENING_FILE"));
  1081. break;
  1082. case INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE:
  1083. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  1084. ("Btl_BppSnd_ParseCancelJobResponse-INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE"));
  1085. break;
  1086. case INTERNAL_FUNC_FAILED_PARSING:
  1087. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  1088. ("Btl_BppSnd_ParseCancelJobResponse-INTERNAL_FUNC_FAILED_PARSING"));
  1089. break;
  1090. default:
  1091. break;
  1092. }
  1093. attributesData->jobId = (U32)instanceData.btAppBppInstanceData.jobId;
  1094. attributesData->operationStatus = (BtlBppsndJobOperationStatus)instanceData.btAppBppInstanceData.operationStatus;
  1095. BTL_FUNC_END();
  1096. return status;
  1097. }
  1098. /*-------------------------------------------------------------------------------
  1099. * Btl_BppSnd_ParseGetEventResponse()
  1100. *
  1101. * Parse a SOAP XML GetEvent response
  1102. *
  1103. * This function parses the response, and sets the attribute values in
  1104. * attributesData.
  1105. *
  1106. * Type:
  1107. * Synchronous
  1108. *
  1109. * Parameters:
  1110. * dataToParse[in] - describes XML response information
  1111. *
  1112. * attributesData [out] - Contains the values of the response attributes.
  1113. *
  1114. * Returns:
  1115. * BT_STATUS_SUCCESS - Operation is successful.
  1116. *
  1117. * BT_STATUS_FAILED - The operation failed.
  1118. */
  1119. BtStatus Btl_BppSnd_ParseGetEventResponse(
  1120. const BtlObject *dataToParse,
  1121. BtlBppsndGetEventResponseData *attributesData)
  1122. {
  1123. BtStatus status = BT_STATUS_SUCCESS;
  1124. UIAppInstanceData instanceData={0}; /* set at start to 0 */
  1125. BTL_FUNC_START("Btl_BppSnd_ParseGetEventResponse");
  1126. switch(fromBufferToUIAppInstanceData(&instanceData,dataToParse))
  1127. {
  1128. case INTERNAL_FUNC_SUCCESS:
  1129. BTL_LOG_DEBUG(("Btl_BppSnd_ParseGetEventResponse-SUCCESS READING FROM BUFFER"));
  1130. break;
  1131. case INTERNAL_FUNC_FAILED_OPENING_FILE:
  1132. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  1133. ("Btl_BppSnd_ParseGetEventResponse-INTERNAL_FUNC_FAILED_OPENING_FILE"));
  1134. break;
  1135. case INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE:
  1136. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  1137. ("Btl_BppSnd_ParseGetEventResponse-INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE"));
  1138. break;
  1139. case INTERNAL_FUNC_FAILED_PARSING:
  1140. BTL_VERIFY_ERR((TRUE), BT_STATUS_FAILED,
  1141. ("Btl_BppSnd_ParseGetEventResponse-INTERNAL_FUNC_FAILED_PARSING"));
  1142. break;
  1143. default:
  1144. break;
  1145. }
  1146. attributesData->printerState = (BtlBppsndPrinterState)(instanceData.btAppBppInstanceData.printerState + 1);
  1147. attributesData->printerStateReasons = (BtlBppsndPrinterStateReasons)(instanceData.btAppBppInstanceData.printerStateReason + 1);
  1148. attributesData->operationStatus = (BtlBppsndJobOperationStatus)instanceData.btAppBppInstanceData.operationStatus;
  1149. BTL_FUNC_END();
  1150. return status;
  1151. }
  1152. /*******************************************************************************************************************
  1153. *
  1154. * Internal Function
  1155. *
  1156. *******************************************************************************************************************/
  1157. /*----------------------------------------------------------------------------
  1158. * fromFileToBuffer()
  1159. *
  1160. * this function used to insert the data to a buffer.
  1161. *
  1162. *
  1163. * Type:
  1164. * Synchronous
  1165. *
  1166. * Parameters:
  1167. * fsPath [in] - the Path of the file in the file system.
  1168. *
  1169. * buffer [out] - the data buffered here.
  1170. *
  1171. * Returns:
  1172. *
  1173. * Returns actual length was ren from file,
  1174. * Returns INTERNAL_FUNC_FAILED_OPENING_FILE if the failed opening file.
  1175. *
  1176. */
  1177. static U32 fromFileToBuffer(const BtlUtf8* fsPath , BtlUtf8 *sBuffer)
  1178. {
  1179. BTHAL_U32 lengthRead =0;
  1180. BthalFsFileDesc fd;
  1181. BtFsStatus fsStatus;
  1182. fsStatus = BTHAL_FS_Open(fsPath, BTHAL_FS_O_RDONLY | BTHAL_FS_O_BINARY, &fd);
  1183. if(fsStatus == BT_STATUS_HAL_FS_SUCCESS )
  1184. {
  1185. fsStatus = BTHAL_FS_Read( fd, sBuffer,sizeof(U8)*BTL_BPPSND_MAX_SOAP_FILE_SIZE, &lengthRead);
  1186. BTHAL_FS_Close( fd);
  1187. }
  1188. return lengthRead;
  1189. }
  1190. /*----------------------------------------------------------------------------
  1191. * fromBufferToObjLoc()
  1192. *
  1193. * this function insert's the data to a buffer.
  1194. *
  1195. *
  1196. * Type:
  1197. * Synchronous
  1198. *
  1199. * Parameters:
  1200. * sBuffer [in] - request string.
  1201. *
  1202. * requestObj [out] - where to place the request.
  1203. *
  1204. * contentLength[in] - the length of sBuffer.
  1205. * Returns:
  1206. *
  1207. *
  1208. */
  1209. static int fromBufferToObjLoc(const BtlObject *requestObj, const BtlUtf8* sBuffer, U16 contentLength)
  1210. {
  1211. U32 lengthWritten =0;
  1212. int successIndex = INTERNAL_FUNC_SUCCESS;/* , streamInt; */
  1213. BthalFsFileDesc fd;
  1214. BtFsStatus fsStatus;
  1215. if(requestObj->objectLocation & BTL_OBJECT_LOCATION_FS)
  1216. {
  1217. /*If we are writing to a file open the file*/
  1218. fsStatus = BTHAL_FS_Open(requestObj->location.fsLocation.fsPath, BTHAL_FS_O_WRONLY | BTHAL_FS_O_BINARY, &fd);
  1219. if(fsStatus == BT_STATUS_HAL_FS_SUCCESS )
  1220. {
  1221. fsStatus = BTHAL_FS_Write( fd, (void *)sBuffer, sizeof(U8)*contentLength, &lengthWritten);
  1222. if(fsStatus != BT_STATUS_HAL_FS_SUCCESS )
  1223. {
  1224. successIndex = INTERNAL_FUNC_FAILED_WRITING_TO_THE_FILE;
  1225. }
  1226. else if(lengthWritten < contentLength)
  1227. {
  1228. successIndex = INTERNAL_FUNC_FAILED_NOT_ALL_DATA_WRITEN; /* not all was writen */
  1229. }
  1230. }
  1231. else
  1232. {
  1233. successIndex = INTERNAL_FUNC_FAILED_OPENING_FILE;
  1234. }
  1235. BTHAL_FS_Close( fd);
  1236. }
  1237. else
  1238. {
  1239. if(!((U32)contentLength > (requestObj->location.memLocation.size)))
  1240. {
  1241. /* the mem alocated is not shorter the the buffer to insert */
  1242. OS_StrnCpyUtf8((BtlUtf8*)(requestObj->location.memLocation.memAddr) , sBuffer, contentLength);
  1243. }
  1244. else
  1245. { /* the mem alocated shorter the the buffer to insert */
  1246. successIndex = INTERNAL_FUNC_FAILED_DATA_LONGER_THEN_MEM; /* memallocated not long enough */
  1247. }
  1248. }
  1249. cleanBuffer(buffer);
  1250. return successIndex ;
  1251. }
  1252. /*----------------------------------------------------------------------------
  1253. * fromBufferToUIAppInstanceData()
  1254. *
  1255. * internal function that inserts the data from a file or memory (given in BtlObject) to a struct
  1256. * that is used by the functions here.
  1257. *
  1258. * Type:
  1259. * Synchronous
  1260. *
  1261. * Parameters:
  1262. * dataToParse [in] - the location of the Data.
  1263. * instanceData [out] - the data inserted to this structure .
  1264. *
  1265. * Returns:
  1266. *
  1267. *
  1268. */
  1269. static int fromBufferToUIAppInstanceData(UIAppInstanceData * instanceData,const BtlObject *dataToParse)
  1270. {
  1271. U32 sizeRead=0 ;
  1272. int success = INTERNAL_FUNC_SUCCESS;
  1273. if((dataToParse->objectLocation & BTL_OBJECT_LOCATION_FS))
  1274. {
  1275. /* the data to parse is in a file */
  1276. sizeRead = fromFileToBuffer(dataToParse->location.fsLocation.fsPath, buffer);
  1277. if(!(sizeRead == INTERNAL_FUNC_FAILED_OPENING_FILE))
  1278. {
  1279. if(sizeRead >= BTL_BPPSND_MAX_SOAP_FILE_SIZE)
  1280. {
  1281. success = INTERNAL_FUNC_FAILED_DIDNT_READ_ALL_FILE;
  1282. }
  1283. else
  1284. {
  1285. success = parseBppXmlRspData(instanceData,buffer,sizeRead);
  1286. }
  1287. }
  1288. else
  1289. {
  1290. success = INTERNAL_FUNC_FAILED_OPENING_FILE;
  1291. }
  1292. }
  1293. else
  1294. {
  1295. /* the data to parse is in a buffer elready */
  1296. sizeRead= dataToParse->location.memLocation.size;
  1297. success = parseBppXmlRspData(instanceData, (U8*)(dataToParse->location.memLocation.memAddr),sizeRead);
  1298. }
  1299. if(!success)
  1300. {
  1301. success = INTERNAL_FUNC_FAILED_PARSING;
  1302. }
  1303. cleanBuffer(buffer);
  1304. return success;
  1305. }
  1306. /*----------------------------------------------------------------------------
  1307. * cleanBuffer()
  1308. *
  1309. * internal function that cleans the buffer after every use.
  1310. *
  1311. * Type:
  1312. * Synchronous
  1313. *
  1314. * Parameters:
  1315. *
  1316. * buffToClean [in/out] - the buffer to be cleaned.
  1317. *
  1318. * Returns:
  1319. *
  1320. *
  1321. */
  1322. void cleanBuffer(U8 *buffToClean)
  1323. {
  1324. U32 index = 0;
  1325. while(index<=BTL_BPPSND_MAX_SOAP_FILE_SIZE)
  1326. {
  1327. buffToClean[index] = '\0';
  1328. index++;
  1329. }
  1330. }
  1331. #endif /* BTL_CONFIG_BPPSND == BTL_CONFIG_ENABLED*/