/** * @brief Disconnect from a peer. * Use the AppleMIDI protocol to tell the peer that the session ended. * Remove the peer from the RTPSession. * @public @memberof MIDIDriverAppleMIDI * @param driver The driver. * @param size The size of the address pointed to by @c addr. * @param addr A pointer to an address that can be used to send packets to the client. * @retval 0 on success. * @retval >0 if the session could not be ended. */ int MIDIDriverAppleMIDIRemovePeerWithSockaddr( struct MIDIDriverAppleMIDI * driver, socklen_t size, struct sockaddr * addr ) { int result; struct RTPPeer * peer; result = RTPSessionFindPeerByAddress( driver->rtp_session, &peer, size, addr ); if( result ) { return result; } result = RTPSessionRemovePeer( driver->rtp_session, peer ); result += _applemidi_endsession( driver, driver->control_socket, size, addr ); return result; }
static int _applemidi_disconnect_peer( struct MIDIDriverAppleMIDI * driver, struct RTPPeer * peer ) { int result = 0; struct sockaddr * rtp_addr = NULL; struct sockaddr_storage addr; socklen_t size; if( RTPPeerGetAddress( peer, &size, &rtp_addr ) || rtp_addr == NULL ) { return 1; } _applemidi_control_addr( size, rtp_addr, (struct sockaddr *) &addr ); result = _applemidi_endsession( driver, driver->control_socket, size, (struct sockaddr *) &addr ); RTPSessionRemovePeer( driver->rtp_session, peer ); return result; }
static int _applemidi_disconnect_peer(struct MIDIDriverAppleMIDI *driver, struct RTPPeer *peer) { int result = 0; struct sockaddr_in *rtp_addr = NULL; int size; if (RTPPeerGetAddress(peer, &size, &rtp_addr) || rtp_addr == NULL) { return 1; } result = _applemidi_endsession(driver, driver->control_socket->sk, size, (struct sockaddr_in *)&rtp_addr); RTPSessionRemovePeer(driver->rtp_session, peer); return result; }