Пример #1
0
/**
 * @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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}