Ce projet correspond aux bugs détectés ou aux demandes d'évolutions pour la Freebox ADSL / V5 (la petite soeur de la freebox HD)
Merci de vérifier qu'un bug n'existe pas déjà avant d'en rajouter un. N'indiquez ici que les bugs ou les demandes d'évolutions concernant la freebox ADSL (Téléphonie, réseau...)
Pour les remarques concernant la freebox HD, vous pouvez le faire ICI
FS#3315 — Header HOST aux messages UPnP du IGD
Concerne le projet— Freebox ADSL
Ouverte par ArsZen (ArsZen) - mardi 9 juin, 2009 14:03:19
Dernière édition par Maxime Bizon (mbizon) - mardi 9 juin, 2009 14:17:04
Ouverte par ArsZen (ArsZen) - mardi 9 juin, 2009 14:03:19
Dernière édition par Maxime Bizon (mbizon) - mardi 9 juin, 2009 14:17:04
| Anomalie | |
| Routeur | |
| FERME | |
| Personne | |
| Tous |
| Haute | |
| Normale | |
| 1.2.4 | |
| Non décidé | |
| Non décidé | |
![]() |
Les message de NOTIFY que la Frebox ADSL envoie toutes les minutes pour signaler que son IGD est toujours présent n'ont pas de header HOST ; certains control points UPnP ne voient plus le IGD 4 minutes après la réponse au message M-SEARCH initial ; tous les programmes Java qui utilisent le UPnP CyberLink sont dans ce cas (le plus utilisé).
NOTIFY * HTTP/1.0
SERVER: UPnP/1.0 fbxigdd/1.0
LOCATION: http://192.168.0.254:5678/desc/root
CACHE-CONTROL: max-age=180
NT: upnp:rootdevice
NTS: ssdp:alive
USN: uuid:73616d61-3a65-7374-650a-0006cbb69d40::upnp:rootdevice
Ce header est required dans la "UPnP™ Device Architecture version 1.0" (http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.0.pdf, page 15) pour avoir des messages compatibles HTTPMU, HTTP over multicast UDP.
Solution :
ajouter une ligne "HOST: 239.255.255.250:1900" aux messages SSDP, pour qu'ils soient conformes à la spécification UPnP.
NOTIFY * HTTP/1.0
SERVER: UPnP/1.0 fbxigdd/1.0
LOCATION: http://192.168.0.254:5678/desc/root
CACHE-CONTROL: max-age=180
NT: upnp:rootdevice
NTS: ssdp:alive
USN: uuid:73616d61-3a65-7374-650a-0006cbb69d40::upnp:rootdevice
Ce header est required dans la "UPnP™ Device Architecture version 1.0" (http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.0.pdf, page 15) pour avoir des messages compatibles HTTPMU, HTTP over multicast UDP.
Solution :
ajouter une ligne "HOST: 239.255.255.250:1900" aux messages SSDP, pour qu'ils soient conformes à la spécification UPnP.
Cette tâche dépend de
Cette tâche bloque la fermeture de
Date: jeudi 2 juillet, 2009 18:31:47
Raison de clôture: Bug corrigé

Ce petit programme Java permet de vérifier ce bug, pour ceux qui ont un JDK 5 ou plus :
--------
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetSocketAddress;
import java.net.MulticastSocket;
import java.net.SocketAddress;
import java.net.SocketTimeoutException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class QuietControlPoint implements Runnable {
private static final Logger LOGGER = Logger.getLogger(QuietControlPoint.class.getName());
private static final String CHARSET_NAME = "UTF-8";
private static final String SSDP_IP = "239.255.255.250";
private static final int SSDP_PORT = 1900;
private static final SocketAddress SSDP_ADDRESS = new InetSocketAddress(SSDP_IP, SSDP_PORT);
private static final int BUF_SIZE = 16 * 1024;
private static final int PACKET_LENGTH = 2 * 1024;
private static final int SO_TIMEOUT = 250;
private final ExecutorService queue = Executors.newSingleThreadExecutor();
private MulticastSocket socket;
private byte[] buffer = new byte[BUF_SIZE];
private int offset = 0;
private DatagramPacket input = new DatagramPacket(buffer, offset, PACKET_LENGTH);
public void run() {
try {
try {
init();
while (System.in.available() == 0) {
try {
receive();
} catch (final SocketTimeoutException ignore) {
continue;
}
}
} finally {
try {
close();
} catch (final IOException ignore) {
LOGGER.log(Level.SEVERE, "", ignore);
}
}
} catch (final Throwable ignore) {
LOGGER.log(Level.SEVERE, "", ignore);
}
}
private void init() throws IOException {
socket = new MulticastSocket(new InetSocketAddress(SSDP_PORT));
socket.setSoTimeout(SO_TIMEOUT);
socket.setLoopbackMode(false);
socket.joinGroup(SSDP_ADDRESS, null);
}
protected void receive() throws IOException {
socket.receive(input);
queue.submit(new Parser(input));
offset = input.getOffset() + input.getLength();
if ((BUF_SIZE - PACKET_LENGTH) < offset) {
buffer = new byte[BUF_SIZE];
offset = 0;
}
input = new DatagramPacket(buffer, offset, PACKET_LENGTH);
}
private void close() throws IOException {
socket.leaveGroup(SSDP_ADDRESS, null);
socket.close();
socket = null;
queue.shutdown();
}
private static class Parser implements Runnable {
private final long now = System.currentTimeMillis();
private final DatagramPacket packet;
private Parser(final DatagramPacket packet) {
this.packet = packet;
}
public void run() {
try {
final String string = new String(packet.getData(), packet.getOffset(), packet.getLength(),
CHARSET_NAME);
final StringBuilder builder = new StringBuilder();
builder.append(packet.getSocketAddress()).append("\n").append(string);
final LogRecord record = new LogRecord(Level.INFO, builder.toString());
record.setMillis(now);
LOGGER.log(record);
} catch (final Throwable ignore) {
LOGGER.log(Level.SEVERE, "", ignore);
}
}
}
public static void main(final String[] args) {
final Thread thread = new Thread(new QuietControlPoint());
thread.setName(QuietControlPoint.class.getSimpleName());
thread.start();
}
}
--------
Effectivement, merci pour le bug report, ca sera corrigé dans la prochaine version du firmware.
Oh, rapide ! :)
J'aime ! :)
Merci bien.
Le plus long a été de trouver où signaler ce bug.
Bonjour,
Ca devrait être bon avec la version 1.5.5, vous confirmez ?
Oui, maintenant, depuis la 1.5.5 c'est impeccable : le IGD est reconnu en permanence.
Merci ! :)