/** * Receive an image sharing invitation * * @param invite Initial invite */ public void receiveImageSharingInvitation(SipRequest invite) { if (logger.isActivated()) { logger.info("Receive an image sharing session invitation"); } // Test if call is established if (!getImsModule().getCallManager().isCallConnected()) { if (logger.isActivated()) { logger.debug("Rich call not established: reject the invitation"); } sendErrorResponse(invite, 606); return; } // Reject if there are already 2 bidirectional sessions with a given contact boolean rejectInvitation = false; String contact = SipUtils.getAssertedIdentity(invite); Vector<ContentSharingSession> currentSessions = getCShSessions(); if (currentSessions.size() >= 2) { // Already a bidirectional session if (logger.isActivated()) { logger.debug("Max sessions reached"); } rejectInvitation = true; } else if (currentSessions.size() == 1) { ContentSharingSession currentSession = currentSessions.elementAt(0); if (currentSession instanceof TerminatingImageTransferSession) { // Terminating session already used if (logger.isActivated()) { logger.debug("Max terminating sessions reached"); } rejectInvitation = true; } else if (!PhoneUtils.compareNumbers(contact, currentSession.getRemoteContact())) { // Not the same contact if (logger.isActivated()) { logger.debug("Only bidirectional session with same contact authorized"); } rejectInvitation = true; } } if (rejectInvitation) { if (logger.isActivated()) { logger.debug("The max number of sharing sessions is achieved: reject the invitation"); } sendErrorResponse(invite, 486); return; } // Create a new session ImageTransferSession session = new TerminatingImageTransferSession(this, invite); // Start the session session.startSession(); // Notify listener getImsModule().getCore().getListener().handleContentSharingTransferInvitation(session); }
/** * Receive a new image sharing invitation * * @param session Image sharing session */ public void receiveImageSharingInvitation(ImageTransferSession session) { if (logger.isActivated()) { logger.info("Receive image sharing invitation from " + session.getRemoteContact()); } // Extract number from contact String number = PhoneUtils.extractNumberFromUri(session.getRemoteContact()); // Update rich call history RichCall.getInstance() .addCall( number, session.getSessionID(), RichCallData.EVENT_INCOMING, session.getContent(), RichCallData.STATUS_STARTED); // Add session in the list ImageSharingSession sessionApi = new ImageSharingSession(session); addImageSharingSession(sessionApi); // Broadcast intent related to the received invitation Intent intent = new Intent(RichCallApiIntents.IMAGE_SHARING_INVITATION); intent.putExtra("contact", number); intent.putExtra("contactDisplayname", session.getRemoteDisplayName()); intent.putExtra("sessionId", session.getSessionID()); intent.putExtra("filename", session.getContent().getName()); intent.putExtra("filesize", session.getContent().getSize()); intent.putExtra("filetype", session.getContent().getEncoding()); intent.putExtra("thumbnail", session.getThumbnail()); AndroidFactory.getApplicationContext().sendBroadcast(intent); }
/** * Initiate an image sharing session * * @param contact Contact * @param file Image file * @param thumbnail Thumbnail option * @throws ServerApiException */ public IImageSharingSession initiateImageSharing(String contact, String file, boolean thumbnail) throws ServerApiException { if (logger.isActivated()) { logger.info("Initiate an image sharing session with " + contact); } // Check permission ServerApiUtils.testPermission(); // Test IMS connection ServerApiUtils.testIms(); try { // Create an image content FileDescription desc = FileFactory.getFactory().getFileDescription(file); MmContent content = ContentManager.createMmContentFromUrl(file, desc.getSize()); // Initiate a sharing session ImageTransferSession session = Core.getInstance() .getRichcallService() .initiateImageSharingSession(contact, content, thumbnail); // Update rich call history RichCall.getInstance() .addCall( contact, session.getSessionID(), RichCallData.EVENT_OUTGOING, session.getContent(), RichCallData.STATUS_STARTED); // Add session in the list ImageSharingSession sessionApi = new ImageSharingSession(session); addImageSharingSession(sessionApi); return sessionApi; } catch (Exception e) { if (logger.isActivated()) { logger.error("Unexpected error", e); } throw new ServerApiException(e.getMessage()); } }